前言
公司为统一应用程序开发环境,简化开发管理成本,提高开发质量,可以考虑开发统一的框架和工具。骨架工程基于MAVEN项目管理,提供了搭建项目必要使用的几个骨架组件。在这些骨架组件中,基本的依赖和基本设置都在模板中做好,无需各项目重复工作,比如集成了统一开发的数据库操作组件、redis操作等基础组件。项目开发组在这个框架的基础上,根据自己的实际需要增加或者裁减组件的配置并编写自己的应用,这样既能统一项目设置和架构,又能大量节省开发人员搭建框架的时间。
1.系统框架结构简介
我采用的Framework是典型的2层架构,表现层和后台逻辑分开,框架做到开发和发布独立。整个系统框架中的项目,采用maven进行管理。框架结构图如下所示:
下面对该框架的构成及其技术应用,进行简要的说明:
1.1数据层
我们支持的数据访问技术是cnf-dal,关于该组件的简单应用介绍可参考:公共组件之cnf-dal。
1. 基于JDBC Template实现
2. 支持多数据源
3. 支持数据缓存
基于Jedis的数据缓存支持。
1.2逻辑层
1. 普通类实现
2. 用Spring framework IoC容器管理
3. 支持使用Spring的自动注入
注意:自动注入的变量申请为default作用域(也就是没有作用域),不要申请为private,因为这样注入效能低。
1.3接口
1. 接口和实现分开成独立的两个jar发布,使表现层及外系统仅直接依赖接口工程,从而轻松支持各层次分工开发。
2. 系统内部的接口既可以是本地调用,也可以是hessian或是webservice的远程调用,接口对表现层透明,也就是说表现层完全不用关心接口后面是本地调用还是远程调用。发布时也可以根据实际情况改变策略,而不需要改变代码。比如,原本是本地调用的,现在因系统扩容需要,可以改变成远程调用。
1.4表现层
1. 支持freemarker、jsp页面。
2. 基于Spring-WebMVC。
3. jQuery 及jQuery-ui javascript 类库。
2.项目搭建
框架开发完成后会发布到公司的maven构件库中,各项目在开始项目时,用maven命令即可产生出相应的项目框架。
下面是发布到maven构件库中的骨架工程列表:
骨架工程名称 |
用途 |
备注 |
cnf-archetype-pom |
Maven管理项目 |
必选 |
cnf-archetype-intf |
接口项目 |
必选 |
cnf-archetype-service |
业务逻辑、数据访问实现项目 |
必选 |
cnf-archetype-web |
外部web工程(前台) |
可选 |
cnf-archetype-admin |
内部web工程(后台) |
可选 |
cnf-archetype-admin-uaa |
内部web工程(后台)-- 包含uaa组件(统一权限组件) |
可选 |
注:关于如何创建自定义的模板,可参考我的博客文章:http://my.oschina.net/wangrikui/blog/498807
2.1搭建工程
首先需要为cnf-sample项目创建一个新的workspace,假设现已经新建一个工作目录,如:d:\workspaces\cnf-sample。接下来即在该目录下生成自己的项目工程(此处以使用命令行生成pom项目进行举例说明,其他几个项目同理):
通过该方式,首先需要进入到生成项目的所在目录下,然后根据项目需要分别进行如下项目的新建操作(其中sample表示自己的项目名称):
· 生成pom项目
mvn archetype:generate -DarchetypeGroupId=com.wangtl.framework -DarchetypeArtifactId=cnf-archetype-pom -DarchetypeVersion=1.0.0 -DgroupId=com.wangtl.sample -DartifactId=cnf-sample -Dversion=0.0.1 |
生成项目(下同) 为了加速查找骨架,可以加一个参数: -DarchetypeRepository=[远程maven仓库的地址] |
rename cnf-sample cnf-sample-pom |
更改项目目录名 |
提示:1.0.0是骨架构件当前的版本,
· 生成intf项目
mvn archetype:generate -DarchetypeGroupId=com.wangtl.framework -DarchetypeArtifactId=cnf-archetype-intf -DarchetypeVersion=1.0.0 -DgroupId=com.wangtl.sample -DartifactId=cnf-sample -Dversion=0.0.1 |
生成项目(下同) 为了加速查找骨架,可以加一个参数: -DarchetypeRepository=[远程maven仓库的地址] |
rename cnf-sample cnf-sample-intf |
更改项目目录名 |
以此类推,生成其他几个目标项目。
2.2各子项目介绍
2.2.1 POM项目:cnf-archetype-pom
1.该项目的pom.xml文件中添加了对父pom的继承,父pom中定义了一般项目会用到的jar包依赖,作为这些jar包版本管理工具。其依赖定义如下:
<parent>
<groupId>com.wangtl.framework</groupId>
<artifactId>cnf-parent</artifactId>
<version>1.0.0</version>
</parent>
注:groupId和artifactId只是给出的虚拟名字,真是项目中换成自己的groupId和artifactId,下同。
2. 同时该项目的pom.xml文件中可定义模块,实现对其他子项目的统筹管理,其定义格式如下:
<modules>
<module>../ cnf-sample -intf</module>
<module>../ cnf-sample -service</module>
<module>../ cnf-sample -web</module>
<module>../ cnf-sample -admin</module>
</modules>
3. 此外该pom文件中还能定义一个项目的基本信息,包括开发者、项目信息
2.2.2接口项目:cnf-archetype-intf
该项目专门用于存放接口代码。接口代码文件包括业务接口和entity(或是DTO),都是纯接口和数据结构,一般没有测试代码。
2.2.3实现项目:cnf-archetype-service
该项目用于存放逻辑层和数据层实现的代码。该项目的配置文件一共分为四大类,分别为spring配置文件、日志配置文件、SQL配置文件、properties配置文件,该项目中的配置文件清单说明如下:
1.properties配置文件:该文件用来定义一些变量值,在项目运行的时候,其中的变量值会被用来替换其他配置文件中对其变量的引用。
2.Spring的配置文件一共分以下几个:
a. spring -res.xml:各种资源(如数据源,MQ工厂等)设置及逻辑层变量。
b. spring -da.xml:数据访问层的设置。
c. spring -impl.xml:逻辑实现Bean都在这里。
3.SQL配置文件:在/conf/sqlMap/目录下的配置文件,用于数据层组件的应用配置文件。
4.日志配置文件:该文件用于对项目的日志进行配置。
2.2.4展示层项目:cnf-archetype-web、cnf-archetype-admin、cnf-archetype-admin-uaa
该项目专门用于存放逻辑处理代码、页面及相应的静态资源文件。