J2EE开发之三种项目架构
转载请注明原文地址: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层。
J2EE开发之三种项目架构的更多相关文章
- Android开发之三种动画
转载:http://www.cnblogs.com/angeldevil/archive/2011/12/02/2271096.html http://www.lightskystreet.com/2 ...
- web开发性能优化---项目架构篇
项目技术架构层级规划和介绍 简称四横两纵 四横即四大层次.分别为: 1.用户渠道层:用户渠道层是直接面向终于用户.通过站点的形式向用户提供产品展示.企业市场宣传.对产品的订购.互动分享.客户关怀以及用 ...
- mybatis的注解开发之三种动态sql
脚本sql XML配置方式的动态SQL我就不讲了,有兴趣可以自己了解,下面是用<script>的方式把它照搬过来,用注解来实现.适用于xml配置转换到注解配置 @Select(" ...
- 项目架构开发:数据访问层之Repository
接上文 项目架构开发:数据访问层之Logger 本章我们继续IRepository开发,这个仓储与领域模式里边的仓储有区别,更像一个工具类,也就是有些园友说的“伪仓储”, 这个仓储只实现单表的CURD ...
- iOS开发之组件化架构漫谈
前段时间公司项目打算重构,准确来说应该是按之前的产品逻辑重写一个项目.在重构项目之前涉及到架构选型的问题,我和组里小伙伴一起研究了一下组件化架构,打算将项目重构为组件化架构.当然不是直接拿来照搬,还是 ...
- J2EE开发之常用开源项目介绍
主要就我所了解的J2EE开发的框架或开源项目做个介绍,可以根据需求选用适当的开源组件进行开发.主要还是以Spring为核心,也总结了一些以前web开发常用的开源工具和开源类库 1持久层: 1)Hibe ...
- .Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整-控制反转和依赖注入的使用
再次调整项目架构是因为和群友dezhou的一次聊天,我原来的想法是项目尽量做简单点别搞太复杂了,仅使用了DbContext的注入,其他的也没有写接口耦合度很高.和dezhou聊过之后我仔细考虑了一下, ...
- Swift项目开发实战-基于分层架构的多版本iPhone计算器-直播公开课
Swift项目开发实战-基于分层架构的多版本iPhone计算器-直播公开课 本课程采用Q Q群直播方式进行直播,价值99元视频课程免费直播.完整的基于Swift项目实战,手把手教你做一个Swift版i ...
- 项目架构开发:数据访问层之Cache
数据访问层简单介绍 数据访问层,提供整个项目的数据访问与持久化功能.在分层系统中所有有关数据访问.检索.持久化的任务,最终都将在这一层完成. 来看一个比较经典的数据访问层结构图 大概可以看出如下信息 ...
随机推荐
- ExtJS 4.2 教程-05:客户端代理(proxy)
转载自起飞网,原文地址:http://www.qeefee.com/extjs-course-5-client-proxy ExtJS 4.2 教程-01:Hello ExtJS ExtJS 4.2 ...
- 将win7电脑无线网变身WiFi热点,让手机、笔记本共享上网
1.以管理员身份运行命令提示符:快捷键win+R→输入cmd→回车 2.启用并设定虚拟WiFi网卡:运行命令:netsh wlan set hostednetwork mode=allow ssid= ...
- Windows Power Shell简介
Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能. 它引入了许多非常有用的新概念,从而进一步扩展了您在 W ...
- 轻松看懂Java字节码
java字节码 计算机只认识0和1.这意味着任何语言编写的程序最终都需要经过编译器编译成机器码才能被计算机执行.所以,我们所编写的程序在不同的平台上运行前都要经过重新编译才能被执行. 而Java刚诞生 ...
- [转]InnoDB和MyISAM区别
From : http://blog.csdn.net/ghosc/article/details/5391544 MySQL作为当前最为流行的免费数据库服务引擎,已经风靡了很长一段时间,不过也许也有 ...
- 使用idea 在springboot添加本地jar包的方法
原文地址;https://blog.csdn.net/huxiaodong1994/article/details/80702278 1.首先在与src同级的目录下新建一个lib目录,然后将本地jar ...
- Java NIO AsynchronousFileChannel
In Java 7 the AsynchronousFileChannel was added to Java NIO. The AsynchronousFileChannel makes it po ...
- leetcode Roman Integer
class Solution { public: int romanToInt(string s) { if (s.length() < 1) return 0; map<char,int ...
- [leetcode]Gas Station @ Python
原题地址:https://oj.leetcode.com/problems/gas-station/ 题意: There are N gas stations along a circular rou ...
- [leetcode]Evaluate Reverse Polish Notation @ Python
原题地址:https://oj.leetcode.com/problems/evaluate-reverse-polish-notation/ 题意: Evaluate the value of an ...