转载请注明原文地址: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开发之三种项目架构的更多相关文章

  1. Android开发之三种动画

    转载:http://www.cnblogs.com/angeldevil/archive/2011/12/02/2271096.html http://www.lightskystreet.com/2 ...

  2. web开发性能优化---项目架构篇

    项目技术架构层级规划和介绍 简称四横两纵 四横即四大层次.分别为: 1.用户渠道层:用户渠道层是直接面向终于用户.通过站点的形式向用户提供产品展示.企业市场宣传.对产品的订购.互动分享.客户关怀以及用 ...

  3. mybatis的注解开发之三种动态sql

    脚本sql XML配置方式的动态SQL我就不讲了,有兴趣可以自己了解,下面是用<script>的方式把它照搬过来,用注解来实现.适用于xml配置转换到注解配置 @Select(" ...

  4. 项目架构开发:数据访问层之Repository

    接上文 项目架构开发:数据访问层之Logger 本章我们继续IRepository开发,这个仓储与领域模式里边的仓储有区别,更像一个工具类,也就是有些园友说的“伪仓储”, 这个仓储只实现单表的CURD ...

  5. iOS开发之组件化架构漫谈

    前段时间公司项目打算重构,准确来说应该是按之前的产品逻辑重写一个项目.在重构项目之前涉及到架构选型的问题,我和组里小伙伴一起研究了一下组件化架构,打算将项目重构为组件化架构.当然不是直接拿来照搬,还是 ...

  6. J2EE开发之常用开源项目介绍

    主要就我所了解的J2EE开发的框架或开源项目做个介绍,可以根据需求选用适当的开源组件进行开发.主要还是以Spring为核心,也总结了一些以前web开发常用的开源工具和开源类库 1持久层: 1)Hibe ...

  7. .Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整-控制反转和依赖注入的使用

    再次调整项目架构是因为和群友dezhou的一次聊天,我原来的想法是项目尽量做简单点别搞太复杂了,仅使用了DbContext的注入,其他的也没有写接口耦合度很高.和dezhou聊过之后我仔细考虑了一下, ...

  8. Swift项目开发实战-基于分层架构的多版本iPhone计算器-直播公开课

    Swift项目开发实战-基于分层架构的多版本iPhone计算器-直播公开课 本课程采用Q Q群直播方式进行直播,价值99元视频课程免费直播.完整的基于Swift项目实战,手把手教你做一个Swift版i ...

  9. 项目架构开发:数据访问层之Cache

    数据访问层简单介绍 数据访问层,提供整个项目的数据访问与持久化功能.在分层系统中所有有关数据访问.检索.持久化的任务,最终都将在这一层完成. 来看一个比较经典的数据访问层结构图 大概可以看出如下信息 ...

随机推荐

  1. Java分布式系统高并发解决方案

    对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了.而并发问题是绝大部分的程序员头疼的问题, 但话又说回来了,既然逃避不掉,那我们就坦然面对吧~今天就让我们一起来研 ...

  2. bat调用TexturePacker更新SpriteSheet

    一款游戏会用到很多图片资源,通常我们会使用TexturePacker工具进行图片的拼接.压缩,为了考虑性能问题,单个SpriteSheet的尺寸不会设置的太大(最大1024 * 1024),这样就可能 ...

  3. 开源项目MultiChoiceAdapter详解(二)——MultiChoiceArrayAdapter的使用

    MultiChoiceArrayAdapter其实就是可以多选的ArrayAdapter了,ArrayAdpter我们已经很熟悉了.MultiChoiceArrayAdapter这个类是抽象类,所以使 ...

  4. JUnit4单元测试入门教程

    本文按以下顺序讲解JUnit4的使用 下载jar包 单元测试初体验 自动生成测试类 执行顺序 @Test的属性 下载jar包## 下载地址 在github上,把以下两个jar包都下载下来.     下 ...

  5. Grizzly HTTP CoDec ThreadCache 浅析

    Grizzly 的 HTTP CoDec 实现方法更 Netty 的 CoDec 完全不同, 他们思想上的差异主要在于: 1. 解码方式 Grizzly 使用流式解码, 它的HttpHeader对象内 ...

  6. (八十七)AutoLayout的简单介绍与实例

    AutoLayout是继AutoResizing之后的一种自己主动布局方法.攻克了AutoResizing无法处理控件间相互关系的问题. AutoLayout在storyboard中通过底部工具条设置 ...

  7. iOS:调节系统的亮度

    一.简单介绍 亮度是UIScreen的一个浮点型属性,而UIScreen是一个单例,所以这个亮度是全局的,任何一个地方改动,整个手机的亮度都会改变.这个亮度在iOS5.0后被苹果开放,开发者可以很方便 ...

  8. 在XP系统中,如何让添加新管理员帐户和原来的管理员帐户同时存在

    一.有新账户后administrator账户会自动隐藏的,如果你要用administrator账户登录的话,就机器启动到选账户那里用ctrl+alt+del软启动,然后就可以输入账户名administ ...

  9. python将控制台输出保存至文件

    很多时候在Linux系统下运行python程序时,控制台会输出一些有用的信息.为了方便保存这些信息,有时需要对这些信息进行保存.这里介绍几种将控制台输出保存到文件中的方式:1 重定向标准输出流重定向标 ...

  10. ListPopupWindow 列表弹窗 常见弹窗区别

    案例 private void showPopupWindow(final Context context, @NonNull View anchorView) { final String[] po ...