Appfuse

Appfuse是一个集成了当前多种开源框架的一个更高层次的适用于B/S结构的开发框架,也是一个Web开发的基础平台。
Spring是它的主线。

Ant:完成自动构件的功能。

一个典型的appfuse目录结构:
resource文件夹里面放置了一些系统的配置文件。src里面放置的是源代码
sql目录里面放置的是DDL文件,比如创建表、创建视图之类的语言
test目录里面放置测试用例。
web目录里面较为复杂,里面有jsp、WEB-INF(里面很复杂)、styles(里面放CSS样式表)、scripts目录里面
  放置javascript,images里面放图片,META-INF目录里面可以指定main函数在哪个class里面、
  以及jar包之间的依赖关系。decorators目录中
doc目录存放文档。

Appfuse系统的特征:
1.模型驱动,可理解行性强
2.层次清晰,职责分明,可维护性强
3.非侵入性
4.可移植性
5.可扩展性

模型驱动:所谓驱动就是以模型为基础,让这个模型为基础去推动项目发展。比如我们开发项目一般都是需求驱动的,
  需求决定我们下一步该做什么事情;模型又是什么呢?小范围的角度说是数据实体对象,这种数据对象不涉及
  业务(也就仅仅是一些getter、setter方法,可能还有一些add、remove方法),看似简单的模型如果识别
  不当的话会导致很严重的问题。模型是来自于需求的,在需求识别过程中,我没有识别出用户需要一个属性
  是birthday。那么我后来如果要添加这个属性的话,首先会影响jsp页面的表现层,如果你用的是struts的话,
  还会影响formbean、validator验证框架,而且业务层的逻辑处理可能也会有相应的变化,OR-mapping的
  配置文件也得改。可谓“牵一发而动全身”,这也就是以模型为推动的含义所在,上面的很多功能都是围绕模型
  而来。

在模型构建的时候首先需要识别出实体,抽取出实体,比如教室、人员、电脑等。其次就是识别出实体之间的关系。
抽取实体以及实体之间的关系都是基于需求的,在某种程度上,关系比实体要重要,因为实体毕竟是清晰的,关系是不
清晰的

关系从面向对象的方式有两种分类的方式,一是按照方向:比如A和B两个类,方向如果是双向的话,那么从A可以知道B,
从B中也可以得到A,如果是单向的话,就是单方得到对方。二是按照数量:比如1对1、1对n、n对n

如果是1对1的话,在A中建立B对象的一个属性,再加上getter、setter方法即可。B中也用类似的处理。
如果是1对0的话,又怎么弄呢?A里面可能有B,也可能没有B,这种时候还是采用上面的方法处理,如果在运行的时候
   可以get到B,那么就是1对1,否则就是1对0了。
如果是1对n的话,使用集合的形式,如List、Set、Vector之类的东西来做。但是抛开技术因素来讲,还需要再分,
   从生命周期的角度来讲,这个1对n是否是聚合的呢?
   比如人和手、脚,正常情况下,一个人有两只手,这是1对n的聚合关系,如果人没有了,手也就没有意义了。
   如果是计算机和主板、其他零部件,二者之间是1对n的组合关系,计算机不存在了,零部件还是有意义的。
   
识别出实体、relation以及relation之中的各种各样的细节,这才是model-driven真正的含义。

聚合和组合如何来表现呢?
聚合在数据库层次体现的就是级联删除。

可维护性好,职责清楚:
比如Site Mesh 、Ajax Serverside、Taglib就是负责显示;Struts、SpringMVC就是页面跳转处理;
EHCache、iText、Digester就是负责逻辑;DAO就是负责数据持久层

修改任何一层面都不会影响其他层面。如果jsp里面全是数据库连接代码的话,就没法弄了……

非侵入性、可移植性、可扩展性这三方面都是来自于Spring。

下面说一下appfuse里面的核心框架Spring,此部分是重点。
Spring的作用相当于一个粘合剂

Spring的基本特征:
首先是轻量级,大小才1M左右

反向控制和依赖注入、面向切面等特征。

AOP是声明式的事务机制,AOP与JTA相结合实现了分布式的数据源的事务机制

其实对于一个web工程来说,建立好工程之后,会有一个工程文件夹(也就是含有WEB-INF的那个文件夹)
还会有一个src文件夹,在src文件夹里面一般都会有java类文件和配置文件,编译后会把src中的java文件
编译成class文件然后放到WEB-INF中的classes文件夹里面,而src中的非java文件(也就是配置文件)
会被直接拷贝到classes文件夹里面的!这里务必注意一点,那就是:如果配置文件不在src目录里的话,
一定要在工程的属性里面,用addFolder的方法将配置文件的文件夹加入到BuildingPath里面去,这样容器
才会在build工程的时候把这些配置文件加入到classes文件夹里面去!!

重要语法:
import:更好的组织spring的配置文件
<beans>
 <import resource="resource_servlet.xml" />
  <import resource="console_servlet.xml" />
</beans>
减少团队开发的冲突,但是当import产生循环引用的时候,会发生什么样的事情?
比如AimportB,BimportC,CimportA,这就形成了一个环路!会不停的解析A、B、C这三个XML文件。

autowire:
自动装配。default-autowire就是“默认自动装配”,一般初始值是no,当属性名和bean的id相同的时候,
就可以自动装配了。

如果不自动装配的话,写xml配置文件的时候会有点麻烦,但同时清晰、可读性好。
但是如果自动安装类型或者名字去装配的话,配置文件中的书写错误不会被在刚启动的时候被发现,而只能在
    运行的时候被发现

Web目录的结构

首先是物理目录的结构:
各个目录的内容见昨天的日记

页面的逻辑结构:


Ajax框架:
异步的javascript和xml,是面向业务的(包括javascript、xml、css、dom等技术)
Ajax属于Web2.0这个业务范畴,Web2.0里面没有新的技术,只是对业务方面有贡献,包括blog(解决了
用户从一个系统的浏览者变成了参与者并能发布东西)、RSS(比如新浪点点通阅读器,将新闻主动送到你眼前,
RSS里面就是通过一个DTD来限制)、AJAX、REST(轻量级的WebService)

ajax中最麻烦的就是javascript!javaScript是一个动态的、运行时的语言,编写调试时非常的困难。
JavaScript是一个运行在浏览器中的语言,需要通过XHttpRequest和后台的不同语言进行通讯。他们
之间能够传递的只是“文本”而已。javaScript在各个浏览器之间是不完全兼容的,比如IE和firefox之间
就是。

火狐浏览器里面有可以调试javascript的工具,应该有所帮助。

实现级联菜单有两种方式:iFrame 和 Ajax

---------------------------------------------------------------------------------
比较大型的开源组织:

apache、sourceforge、ObjectWeb,
页面组装工具SiteMesh

显示层:displaytag(是第三方提供的,extemecomponent)
displaytag的实质是把数据库中的所有数据都抓出来然后统一的进行分页的显示!这是不好的……
比如数据库中有十万条记录,但是你只想看其中的二十条的话……那就糟了。应该是我要第几条到
第几条的记录,数据库就会从表里给我定位这些记录,不要涉及其他无关的记录。

CSS:支持

你可能感兴趣的:(JavaScript,spring,数据结构,Ajax,Appfuse)