传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229
在上述功能架构中,除了核心层外,应用层及服务层都包括了用户UI界面,因此服务中包括了Mashup所需的WebAPI,需要采用MVC的WebApp框架来实现。整套系统的技术架构如下图所示,根据总体架构的设计思想,自定而下包括了客户端、服务层、核心层、系统软件平台、基础设施。整套技术架构建设在B/S架构模式下。
技术架构中,层次之间的连接主要包括了Mashup技术及WebAPP框架。
Mashup架构由3个不同的部分组成,它们在逻辑上和物理上都是相互脱离的(可能由网络和组织边界分隔):API/内容提供者、Mashup站点和客户机的Web浏览器。
WebApp应用框架主要负责各类服务组件以及业务系统的构建,即内容提供者。WebApp框架主要由展现层,业务层,控制层,数据持久层组成。
整套设计思想中,从数据建模出发采用的是Top-Down设计思路;页面构建采用的是Bottom-Up组装方法;两部分工作最终汇集点在业务层(Services)。通过这种分工的方法,可以最大化地实现从业务建模到页面组件的复用。
WebApp框架包括了表现层的一套组件,框架主要着重的是支持数据库操作,管理数据库连接以及规范架构。
目前框架主要采用的技术为 JSF、Spring、Hibernate。在表现层是JSF,在持久层是Hibernate,框架使用Spring来管理bean之间的依赖关系。WebApp框架是一个全新的软件产品,基于JSF组件模型,可以大量重用JSF的组件;基于Spring的技术进行事务管理;基于Hibernate的数据库持久策略,提供了完整的数据库操作过程。
该框架也具有“自动生成框架”的功能。可以通过Bottom-Up设计理念,从数据模型生成的代码工程。输出是一个搭好的骨架式代码,这个“骨架”分成三层:表示层,业务层,数据持久层。项目开发人员需要进行的是“填充骨架”的程序开发。
架构代码部分主要的包结构是Backing、Entity、Dao、Service这四个部分。这四个部分的名称比较明确,很好的划分了层次内容。其中Backing是JSF中的backingbean,处理表现层。Service是业务层,实现业务操作。Entity与Dao是属于持久层。Entity是hibernate中ORM的数据持久化类,是一些普通的POJO,与数据库表一一映射,entity下有hibernate的hbm文件,表示数据库表与实体的映射关系。Dao是直接与数据库操作的内容。
每个路径下,都按表来划分的,即一个表会对应一个backing,一个entity,一个Service,一个dao。同时在backing与Service中,我们定义了一个base一个sub,sub是提供给用户后续开发使用的。
因此,技术框架使用自动框架生成工具,自动生成。下面清单介绍了框架的主要内容。
JSF表格页面、增加页面、修改页面;
BackingBaseBean,BackingSubBaseBean;
Service接口和具体实现类;
Dao实现(包括基本方法);
配置文件faces-config.xml、applicationContext.xml、web.xml;
生成后所需要的JAR包。
注:生成后所需要的JAR包部分是与代码生成工具一起提供的,有了框架代码和Jar包,即可以构造出完整的开发工程,进行项目开发。
由于本框架使用的是JSF+Spring+Hibernate的架构,因此WEB-INF路径下几个配置文件web.xml以及applicationContext.xml、faces-config.xml是比较重要的。Web.xml定义了使用的框架faces-config.xml定义了JSF页面的backingbean以及跳转关系,而applicationContext.xml定义了bean的依赖关系,即使用依赖注入的功能。
针对每个表的操作,框架提供了从表现层业务层到持久层的过程。这种过程也可以作为项目后续开发的一个参考。以一个表对应的页面为例。他的页面展现的应该是表格功能。页面由JSF实现,现有的页面使用了一些开源的组件,这些由于来源不够稳定的原因,今后不会使用。faces-config.xml定义了页面的backingbean。Backingbean中有一个相应Service的私有成员,它的实例化我们使用spring的依赖注入控制。Backingbean支持页面的数据取得,数据操作方法相应,这些与业务相关操作,是交由其Service进行。
每个Service都有至少一个DAO的成员,它的实例化也是靠spring的依赖注入控制。我们在Service中进行对数据的逻辑操作,其最后与数据库交互的过程,是由DAO完成。DAO基本上是Hibernate的内容,DAO中提供了完整的数据库操作方法,封装好了一些常用的查询,插入删除功能,也提供了按sql语句进行操作。
对于service中的非数据库操作,spring也提供能相当完善的无缝插入,对于JMS、WebService、RMI等分布式远程调用都提供了相当灵活而简单的帮助类,当注入到具体的业务处理实现类中后能让调用者根本无需知道具体的实现方式,对业务的实现提供能很好的扩展性,适应性,标准性和开放性。
对于项目的开发过程中,使用了框架之后,DAO,POJO不需要修改,主要需要后续开发的是针对需求功能开发页面和backingbean。对backingbean可以在现有的subbackingbean进行,针对需求实现业务,在Service中开发业务逻辑。Service中对数据库的操作,调用DAO类相应方法。
其中对于service层和DAO层的服务能力通过web容器集群来横向扩展,在DAO层通过web容器集群的session复制原理来实现在多容器环境中数据的同步存储,对service层通过web容器集群负载均衡达到对效率的优化整合,提高service层的响应能力,以最终到达整体应用的适用性,安全性和扩充性。