转载请注明原文地址: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. XVFB实现selenium在linux上无界面运行安装篇

    selenium在linux上无界面运行,其实是非常简单的.具体的方法有使用HtmlUnitDriver或者PhantomJSDriver,有时间我会写写关于这两个东东的文章,其实基本和ChromeD ...

  2. Android之文件搜索工具类

    /** * @detail 搜索sdcard文件 * @param 需要进行文件搜索的目录 * @param 过滤搜索文件类型 * */ private void search(File file, ...

  3. 获得手机当前的ip地址

    package com.kale.floating.net; import java.net.Inet4Address; import java.net.InetAddress; import jav ...

  4. .condarc(conda 配置文件)、换国内源

    原文地址 https://blog.csdn.net/lanchunhui/article/details/71379555 Configuration — Conda documentation . ...

  5. 空间金字塔池化(Spatial Pyramid Pooling,SPP)

    基于空间金字塔池化的卷积神经网络物体检测 原文地址:http://blog.csdn.net/hjimce/article/details/50187655 作者:hjimce 一.相关理论 本篇博文 ...

  6. [转]Android开发环境搭建(图文教程)

    转自:http://www.cnblogs.com/yxwkf/p/3853046.html 昨天又搭建了一次Android的开发环境,尝试了好几种方式,也遇到了一些问题,在此分享一下. 注意:官网公 ...

  7. 使用jstl标签时提示The absolute uri: http://java.sun.com/jsp/jstl/core cannot

    http://www.360doc.com/content/11/1219/15/1007797_173395882.shtml 检查应用目录下WEB-INF的lib里是否有jstl.jar和stan ...

  8. 洛谷 P3386 【模板】二分图匹配

    题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每行两个正整数u,v,表示u,v有一条连边 ...

  9. 【BZOJ】【3930】【CQOI2015】选数

    数论/莫比乌斯反演/快速mu前缀和 比较容易想到令f[x]表示gcd=x的方案数,令g[x]表示x|gcd的方案数. 那么有$ g(d)=\sum_{d|n} f(n)$,根据莫比乌斯反演,有$f(d ...

  10. 在ASP.NET MVC中以post方式传递数组参数的示例【转】

    最近在工作中用到了在ASP.NET MVC中以post方式传递数组参数的情况,记录下来,以供参考. 一.准备参数对象 在本例中,我会传递两个数组参数:一个字符串数组,一个自定义对象数组.这个自定义对象 ...