转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6285069.html

在我们开发项目时,一般都要先划分好哪些是与用户交互的,哪些用来处理请求/数据等等,这些过程无意中就执行了一个简单的架构了。在实际开发活动中,我们可以有一套可遵循的框架进行项目的布置的。这里,我介绍几种递进的架构。

第一种,最简单的三层架构:视图——控制——业务架构。即我们常说的MVC架构,这里换了一种我自己喜欢的更清晰的表达。

在这个架构中,只是把项目文件笼统地划分为三类:视图层、控制层、业务层。

在视图层,主要负责UI呈现,实行交互与获取数据,并把交互信息传给控制层。控制层负责对视图层传来的信息进行处理,包括重定向、转发参数到业务层等。而业务层则负责根据接收的参数对数据库进行操作,并把业务逻辑判断结果(比如:是否登录成功)返回控制层。这三次架构大致上分隔了UI/后台/数据三大部分,一定程度上起到了独立三大块的作用,以及保护了数据的安全性。

架构大致如下:

第二种架构:J3架构。把项目划分为四部分:视图层——控制层——业务层——DAO层。J3架构是对第一种架构的改进,把业务层拆分开来,J3的业务层只负责根据业务调用不同的DAO类并进行业务逻辑判断以及结果返回,而DAO层是一些操作数据库的类,一个DAO类操作一张表,定义了一系列方法封装了对数据库的增删查改以及其他的一系列操作。由于各层之间传递的数据众多,可以定义数据封装类,用类的属性来搭载参数们,通过传递类对象来达到传递一大堆参数的目的。比如:视图层、控制层、业务层直接的参数定义一个VO类来传递,业务层和DAO层定义DTO类来传递数据。

第三种:J4架构。J4是对J3的进一步改进。在J3中,控制层是用JSP文件对视图层的请求等做出处理的。但是我们知道,JSP文件在服务器中要先编译成为servlet再运行,最终才得到结果。如果是动态页面,则我们的确只能用JSP来实现,但是在控制层只是单纯负责对一些特定的请求进行处理,比如登录请求。那么再由JSP编译成servlet运行就没必要了,我们直接定义servlet文件来执行doXX的控制。也就是说,把J3架构的控制层的纯jsp文件换成servlet,就得到J4架构了。

视图层的参数传递到控制层,控制层把参数包装成VO数据封装对象发往相应的业务层类,业务层类根据VO对象提取的数据以及业务类型,把数据封装成DTO对象并发往对应的DAO类执行具体的数据库操作,然后把查询结果返回给业务层,业务层根据结果得到业务逻辑结果,把业务逻辑结果返回给控制层,控制层再根据业务逻辑结果执行相应的响应。

在实际编程时,如果VO和DTO对象没有什么大的区别,一般把这两层统一为BO层。

最新文章

  1. EF7 - What Does “Code First Only” Really Mean
  2. iOS设置圆角矩形和阴影效果
  3. UICollectionView cellForItemAtIndexPath 方法不走
  4. 【Origin】羡旁人
  5. Wordnet 与 Hownet 比较
  6. Python 开源异步并发框架的未来
  7. 我的第一个Struts程序
  8. Improved Semantic Representations From Tree-Structured Long Short-Term Memory Networks(1)
  9. PHP MAIL DEMO(程序代码直接发送邮件)
  10. nodejs+express Mvc站点
  11. php 去掉 头尾 空格 2种方法
  12. GraphLab:新的面向机器学习的并行框架
  13. oracle_安装_win7+64位+Oracle+11g+64位下使用PLSQL+Developer+的解决办法
  14. JS怎样将拖拉事件与点击事件分离?
  15. webservice整合spring
  16. Java Runtime 详解
  17. Another Eight Puzzle
  18. spring和mybatis的整合开发(基于MapperScannerConfigurer的整合开发(适用于复杂项目,接口较多的情况))
  19. spring与disruptor集成的简单示例[z]
  20. [Harbor]Docker登录Harbor仓库(HTTP方式)

热门文章

  1. IP的准确性
  2. 《RESTful Web APIs中文版》
  3. Asp.Net WebApi开启Session回话
  4. Netty精粹之JAVA NIO开发需要知道的
  5. LaTeX技巧:LaTeX括号总结
  6. 光流法(optical flow)
  7. [转]mysqldump备份还原和mysqldump导入导出语句大全详解
  8. kafka-python的gevent模式和kafka的兼容性
  9. 动态SQL(章节摘要)
  10. Risc-V指令集