文档章节

(一)公共组件之骨架工程

wangrikui
 wangrikui
发布于 2015/08/31 16:07
字数 1815
阅读 149
收藏 12

前言

公司为统一应用程序开发环境,简化开发管理成本,提高开发质量,可以考虑开发统一的框架和工具。骨架工程基于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. 支持freemarkerjsp页面。

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>

       注:groupIdartifactId只是给出的虚拟名字,真是项目中换成自己的groupIdartifactId,下同。

       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-webcnf-archetype-admincnf-archetype-admin-uaa

     该项目专门用于存放逻辑处理代码、页面及相应的静态资源文件。

 

© 著作权归作者所有

wangrikui
粉丝 10
博文 31
码字总数 20614
作品 0
南京
后端工程师
私信 提问
加载中

评论(1)

刘万祥
刘万祥
结构很清晰,设计的很好.对了,问一下你文中写的那个注意事项.
注意:自动注入的变量申请为default作用域(也就是没有作用域),不要申请为private,因为这样注入效能低。
这个我们项目现在都是private的.能解释一下吗83
前端优化带来的思考,浅谈前端工程化

这段时间对项目做了一次整体的优化,全站有了20%左右的提升(本来载入速度已经1.2S左右了,优化度很低),算一算已经做了四轮的全站性能优化了,回顾几次的优化手段,基本上几个字就能说清楚...

范大脚脚
2017/11/16
0
0
前端优化带来的思考,浅谈前端工程化

重复优化的思考 这段时间对项目做了一次整体的优化,全站有了20%左右的提升(本来载入速度已经1.2S左右了,优化度很低),算一算已经做了四轮的全站性能优化了,回顾几次的优化手段,基本上几...

范大脚脚
2017/10/19
0
0
手写Maven的archetype项目脚手架

一、背景   maven是一个很好的代码构建工具,采用“约定优先于配置”的原则进行项目管理,相信很多的java开发者应该都了解maven并可能在工作当中都是通过maven来管理项目的,在创建的项目的...

hafiz.zhang
2017/09/18
0
0
大前端的自动化工厂(1)——Yeoman

一.Yeoman是什么 是现代化前端项目的脚手架工具,用于生成包含指定框架结构的工程化目录结构。它是整个前端自动化工厂的第一站。 从个人使用者的角度来看,的地位有些鸡肋,因为流行框架自带...

大史不说话
2018/08/11
0
0
设计模式 ——— 模板方法模式

TEMPLATE METHOD(模板方法) ———— 类行为型模式 意图 定义一个操作中的算法骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定...

tomas家的小拨浪鼓
2017/11/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

优雅的关闭Spring Boot

优雅的关闭Spring Boot 1、实现 TomcatConnectorCustomizer 接口拿到Tomcat的连接获取 Tomcat连接池 2、实现 ApplicationListener<ContextClosedEvent> 监听服务器关闭事件,注册JVM钩子函数...

sowhat
今天
2
0
Python3-Web开发

简介 Web开发框架 什么是Web框架? Web应用程序框架或简单的Web框架表示一组库和模块,使Web应用程序开发人员能够编写应用程序,而不必担心协议,线程管理等低级细节。 virtualenv是一个虚拟...

wuxinshui
今天
3
0
使用技媒体实践编写发布博客

技媒体实践博客 CSDN OSChina 知乎 简书 思否 掘金 51CTO

晨猫
今天
2
0
Lucene

1、什么是全文检索 数据分类 我们生活中的数据总体分为两种:结构化数据和非结构化数据。 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。 非结构化数据:指不定长或无固...

榴莲黑芝麻糊
昨天
5
0
python到setuptools、pip工具的安装

python安装 基础开发库   apt-get install gcc  apt-get install openssl libssl-dev 安装数据库和开发库   apt-get install mysql-server libmysqld-dev python环境   下载地址...

问题终结者
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部