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

前言

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

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

时间: 2024-07-28 22:19:15

(一)公共组件之骨架工程的相关文章

iOS 使用CocoaPods管理私有库的公共组件

最近要使用私有公共组件,故,有了如下的故事. 参考地址: http://www.cocoachina.com/ios/20150228/11206.html 本文使用 https://coding.net 作为Git私有库地址.步骤如下: 1. 创建一个私有的Git 仓库.(例如:SKPodsStart,创建后地址:https://git.coding.net/LeouCC/SKPodsStart.git 2. 添加一个私有Spec Repo到本地,终端命令如下:pod repo add [Sp

Net Core 的公共组件之 Http 请求客户端

Net Core 的公共组件之 Http 请求客户端 想必大家在项目开发的时候应该都在程序中调用过自己内部的接口或者使用过第三方提供的接口,咱今天不讨论 REST ,最常用的请求应该就是 GET 和 POST 了,那下面开始讲解对于 Http 请求客户端的简单封装. 首先,说一个好消息 就是 .Net Core 已将之前的 System.Net.Http 组件默认添加到了 NETStandard.Library 库中,所以直接用就好了,不需要再额外在 Nuget 上安装了,说道 Nuget 后续

一个技术汪的开源梦 —— 基于 .Net Core 的公共组件之序列化

一个技术汪的开源梦 —— 目录 想必大家在项目中都接触过 JSON 或者 XML 吧,为了将对象在网络上传输或者将其持久化必须将其序列化为一个字符串然后进行后续操作.常见的就是将其序列化成 JSON 或者 XML . 大家在项目中应该都看到过这样的工具类 例如 ***XmlHelper.***JsonHelper 等,没错这一些助手类会帮助我们重复造轮子.既然是组件并且还是是开源的必须考虑每个功能的后续可扩展性以及易用性. ISerializer 序列化者接口 1 using System; 2

一个技术汪的开源梦 —— 基于 .Net Core 的公共组件之目录结构

一个技术汪的开源梦 —— 目录 这篇文章是开源公共组件的开篇那就先说说项目的 Github 目录结构和 .Net Core 的项目结构. 1. GitHub 目录结构和相关文件 - src 源码项目目录. - test 单元测试项目目录. - tools 工具目录. - .gitignore 你想要忽略的文件或者目录(一些文件诸如 *.dll.testResults 等 不需要提交到 github 上的文件)详情:https://git-scm.com/docs/gitignore. - .gi

一个技术汪的开源梦 —— 基于 .Net Core 的公共组件之 Http 请求客户端

一个技术汪的开源梦 —— 目录 想必大家在项目开发的时候应该都在程序中调用过自己内部的接口或者使用过第三方提供的接口,咱今天不讨论 REST ,最常用的请求应该就是 GET 和 POST 了,那下面开始讲解对于 Http 请求客户端的简单封装. 首先,说一个好消息 就是 .Net Core 已将之前的 System.Net.Http 组件默认添加到了 NETStandard.Library 库中,所以直接用就好了,不需要再额外在 Nuget 上安装了,说道 Nuget 后续计划会有一篇文章介绍

vue 中子组件或者公共组件向上一级传递数据 $emit的使用

在子组件或者公共组件中,定义一个方法例如 <li @click="selectItem(item)" v-for="item in group.items" class="list-group-item"> 然后在methods中使用 selectItem(item){ this.$emit('select',item); } $emit中的两个参数的含义是,一个是传递给父组件的方法,一个是传递给父组件方法的参数. 也就是说,父组件通

微信小程序公共组件的引用与控制

思路: 1.在组件wxml文件里实现布局.数据绑定.事件绑定: 2.组件js文件里定义事件,并将文件所有内容作为一个对象export出去:3.在引用的文件引入组件(方式有两种,一个是用include引入,一个是import引入,详情:https://mp.weixin.qq.com/debug/wxadoc/dev/framework/view/wxml/import.html); 4.数据传递.在引用文件对应的js里定义要传递的数据,数据名称与组件wxml文件里的一致: 5.函数映射.在引用文

基于vue以及vuex的dialog弹出框公共组件

说明:    一款dialog公共组件, 组件功能: 1. 可拖拽.放大缩小 2. 通过传入属性决定是否使用遮罩层    3. 可根据屏幕自动适应宽高,也可自动传入宽高 4. 自动适应位置相对屏幕居中 5. close关闭按钮等回调函数 详细见github地址:https://github.com/SwnCowDevil/my-dialog 原文地址:https://www.cnblogs.com/sunweinan/p/8695341.html

django之权限管理公共组件

公共组件使用 公共组件的基本搭建 在上一篇已经是学习如何搭建一个公共组件,可以拷贝到任何项目里面,实现权限的管理工作,今天再次学习下公共组件的使用 新建一个项目,并把公共组件拷贝到新项目中取,并且在setting中注册组件 中间件的注册 公共组件的配置管理 在中间件中,通过导入项目的setting文件,从里面导入变量信息,所以我们在setting里面设置了如下变量信息: # ############################## RBAC权限相关配置开始 #################