一个实际项目Java架构设计之总体设计
2015-06-12 23:10
465 查看
1 总体架构模块图
1.1
抽象架构模块图
1.2
具体技术架构模块图
如上图示所,框架主要包括了:
l
MVC开发框架
l 工作流技术
l 用户、权限、角色管理
下面分别详细介绍。
2 MVC方案
2.1
视图层技术方案(view)
在常用开发框架的应用中,常用于视图层的有:Jsp ,Jsf,Freemarker,Xslt, Velocity等.JSP:常用的一种视图层,无法实现严格的MVC分离,JSP代码几乎等同于JAVA代码。表现逻辑与代码相混杂,代码重用性,系统维护性比较低。下面分别介绍:l
JSF:基于组件事件驱动,遵循JAVAEE的标准,上手快,有大量可重用组件。对RESET支持不好,没有一个统一的实现,既有SUN的实现,又有apache的实现-myfaces,编写定自定义组件要求高,比较适合做企业应用。
l
xslt:模板技术之一,有极佳的拓展性和重用性,可实现严格的MVC分离。Xslt缺乏强有力的编辑器支持。在性能上,相对于JSP,Freemarker,Velocity,在等同复杂页面度的表现层逻辑,xslt性能比其他几个差距比较大,占用的内存空间也比较多。
l
Velocity:常用的模板技术之一,可实现严格的MVC分离,简单轻量级,语法简单。vtl语法需要一定上的学习时间,不支持jsp标签。
l
Freemarker:常用的模板技术之一,可实现严格的MVC分离。与Velocity相比,Freemarker功能更加强大,对表现逻辑和业务逻辑的划分更加严格,可自定义macro,Freemarker同时支持JSP的标签。Freemarker对于语法相对比较严格,变量必须赋值,map的key必须为string。
基于以上分析,结合开发效率和运行效率,建议采用Freemarker作为视图层的技术。
2.2
控制层方案(controller)
在常用的控制层技术中,有struct1,struct2,springMVC等。1) struct1:比较早的一个控制层框架,非线程安全,现在很少使用。
2) struct2:较为成熟并应用非常广泛的框架,即经典的SSH,比较热门
3) springMVC:后起之秀,目前最有前景的技术,以下列出与struct2主要对比项:
l 在性能上,springMVC优于struct2。
l
springMVC隶属spring团队的产品,学习过spring的人,上手快。
l
springMVC可实现配零配置,struct2需要无法做到零配置。
l 对于开发效率来讲,springMVC相对struct2,效率高。
l
pringMVC内置restful,无需第三方插件的支持。
l 标杆对照,在淘宝、拍拍等大型电商网站中,也采用springMVC作为控制层技术,有很多资料可作为参考。
从技术的先进性、复杂性上考虑建议采用springMVC作为控制层。
2.3
模型层(module)
可以选用两大主流的开源ORM组件:Hibernate和MyBatis。l
Hibernate学习门槛比较高,限制对象模型,在多表、复杂查询下,优化难度较高。对于后期的维护或者重构来说,难度较大。
l
MyBatis属于半ORM框架,可以对sql做到精细控制,但是开发效率来讲,比hibernate相对慢些,但是利于后期的维护于重构。
从灵活性、可控性、学习成本和本人熟悉程度考虑,配合使用codeSmith代码生器能大幅提高开发效率,建议采用MyBatis,作为项目的ORM框架。
2.4
数据库(database)
可能被采用的数据库有Oracle、Mysql,使用Mysql的好处有:l 源免费数据库,使用较新稳定版本5.5
l 功能强大,稳定;
l 经历过有广泛的成熟的应用实践考验;
l 使用经验比较丰富,容易上手,使用简单;
l 视用户量情况考虑,前期小规模的时候采用Master-Slave主从模式备份。后期逐步考虑:实现数据库读写分离。并可考虑分表、分库,还可以使用集群提升读性能。
使用Oracle的好处有:
l 目前公司已经使用
l 性能好、安全性高,各种方案完整
l 客户较为认可
基于目前公司已使用,所以建议仍采用oracle,但如果需要降低成本可以采用Mysql。
2.5
推荐MVC技术方案流程
2.5.1 总体流程图
2.5.2 控制层(controller)流程图
3 用户、角色、权限管理模块
CAS +LDAP4 工作流方案
可以选择的技术主要有:JBPM4,JBPM5,Activiti5序号 | 技术组成 | Activiti | jBPM5 |
1 | 数据库持久层ORM | MyBatis3 | Hibernate3 |
2 | 持久化标准 | 无 | JPA规范 |
3 | 事务管理 | MyBatis机制/Spring事务控制 | Bitronix,基于JTA事务管理 |
4 | 数据库连接方式 | Jdbc/DataSource | Jdbc/DataSource |
5 | 支持数据库 | Oracle、SQL Server、MySQL等多数数据库 | Oracle、SQL Server、MySQL等多数数据库 |
6 | 设计模式 | Command模式、观察者模式等 | |
7 | 内部服务通讯 | Service间通过API调用 | 基于Apache Mina异步通讯 |
8 | 集成接口 | SOAP、Mule、RESTful | 消息通讯 |
9 | 支持的流程格式 | BPMN2、xPDL、jPDL等 | 目前仅只支持BPMN2 xml |
10 | 引擎核心 | PVM(流程虚拟机) | Drools |
11 | 技术前身 | jBPM3、jBPM4 | Drools Flow |
12 | 所属公司 | Alfresco | jBoss.org |
5 数据集成ETL工具
Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,数据抽取高效稳定。Kettle中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的格式流出。Kettle采用了LGPL协议,即修改后的程序可以不公开发布,可以放心的使用,而不用考虑版权问题。
6 通用基础模块/组件方案
6.1
日志组件
l 采用J2EE平台最常用的Log4J日志组件6.2
Cache组件
l 前期使用单台应用服务器的时候可以直接使用Mybatis内置缓存机制或者是服务器缓存开发;l 后期根据实际运营情况,要使用集群部署方式时,使用Memcached组成分布式集群缓存,这样就不存在缓存同步的问题。
l 通过Spring的AOP结合Memchched将缓存功能嵌入到代码中,根据实际的业务场景,制定缓存策略。
相关文章推荐
- linux系统目录架构
- 学习网站
- 婚恋网站跨入免费时代?颠覆还是无奈
- 个人收集的一些网页上一键云DDOS攻击的网站、IP地址测试,服务器压力测试
- QQ登录集成到自己网站php代码(转载)
- 将QQ登录接口整合到你的网站和如何修改配置
- 4.1 MapReduce架构(1.0)
- django缓存架构
- 高扩展性网站的50条原则
- TOGAF架构培训材料学习总结
- Extjs-Extjs入门三层架构搭建
- IIS7.0 网站发布页面显示 500 - 内部服务器错误。您要查找的资源有问题,无法显示
- 雅虎网站优化34条法则
- IT业界网站整理
- Hadoop2.6(NN/RM)高可用集群安装与部署
- haproxy+keepalived实现高可用负载均衡
- 一些常用的IOS开发网站
- java下的大型网站对图片的下载,存放,及压缩管理
- 电商网站,性能优化
- 什么架构的PMS适合大中型酒店集团?