转自:http://www.blogjava.net/jiabao/archive/2007/04/08/109189.html

为了实现web层(struts)和持久层(Hibernate)之间的松散耦合,我们采用业务代表(Business Delegate)和DAO(Data Access Object)两种模式。DAO模式为了减少业务逻辑和数据访问逻辑之间的耦合,当一个持久曾框架被应用时,该模式将会减少业务对象和该框架之间的耦合,这样我们可以不修改业务对象而选择不同的持久层框架的实现。实际上在DAO模式中包含两种结构模式:桥(Bridge)模式和适配器(Adaptor)模式。

对表现层,我们使用 Struts ;业务层使用 Spring ;对于持久层我们使用的是 Hibernate 。你尽可以取代这里的某个框架而使用你喜欢的框架已达到同样的效果。下图显示了框架被整合起来时,从最高层次看到的视图。

应用层

许多设计良好的web应用,可以被按职责分为四层。这些层次是表现层、持久层、业务层、和领域模型层。每一个层次都有其独特的职责,不能把各自的功能与其它层次相混合。每一个应用层都应该和其它层隔离开来,但允许使用接口在层间进行通信。我们开始来看看每个层,并讨论一下它们各自都应该提供什么和不应该提供什么。

表现层

一个典型的web 应用的末端是表现层。许多Java 开发者都知道Struts提供了什么东西。然而,太多时候,耦合代码比如业务逻辑被放进org.apache.struts.Action中。所以,我们先总结一下Struts之类的框架应该提供什么。下面就是Struts 的职责所在:

  1. 管理用户的请求和响应
  2. 提供一个控制起来将调用委托到业务逻辑和其他上游处理
  3. 将来自于抛出例外的其他层的例外处理到Struts Action 中
  4. 组装可以在视图中表现的模型对象
  5. 执行UI 校验

下面是一些经常可以使用Struts进行编码但是不应该和表现层关联的事情:

  1. 直接和数据库交互,比如JDBC 调用
  2. 与应用相关的业务逻辑和校验
  3. 事务管理

在表现层中引入这些类型的代码将导致类型耦合和维护负担。

持久层

一个典型Web应用的另一端是持久层。这也是应用中最容易很快失控的地方。开发者通常低估了自己构建自己的持久层框架的挑战。一个定制的,内部开发的持久层不仅需要大量的开发时间,并且通常缺乏功能和难以管理。目前有许多解决这些问题的开源对象关系映射 (ORM) 框架。特别地,Hibernate 框架就允许Java中的对象-关系的持久性和查询服务。Hibernate 对已经熟悉了SQL 和JDBC API的Java开发者来或具有中度的学习曲线。Hibernate 的持久对象基于POJO和Java群集(collections)。此外,使用Hibernate 不和你的IDE接口。下面列出了你需要在持久性框架中编写的代码类型:

  1. 查询关系信息到对象中。Hibernate是通过称为HQL的OO查询语言,或者使用更有表现能力的规则API,来完成这个工作的。除了使用对象而不是表,使用字段而不是列的方式,HQL非常类似于 SQL。也有一些新的特定的HQL 语言特征需要学习;但是,它们是很容易理解和良好编写的。HQL是一种用于查询对象的自然语言,而对象,只需要很少的学习曲线吧。.
  2. 存储、更新和删除存储在数据库中的信息
  3. 高级的对象关系映射框架比如Hibernate支持大部分主流SQL数据库,它们支持父/子关系,事务,继承和多态。

下面是应该在持久层避免的一些事情:

  1. 业务逻辑应该置于应用的更高层中。这里只允许数据访问方法。
  2. 不应该使持久逻辑和表现逻辑耦合。避免表现组件如JSP或者基于servlet的类中的逻辑直接和数据访问进行通信。通过将持久性逻辑隔离在其自己的层中,应用将具有更加灵活的修改性而不影响到其他层的代码。例如, Hibernate可以使用其他持久框架和API代替,而不需要修改其它层中的代码。

业务层应该负责下面的问题:

  1. 处理应用的业务逻辑和业务校验
  2. 管理事务
  3. 允许与其他层进行交互的接口
  4. 管理业务级对象之间的依赖性
  5. 加入了表现和持久层之间的灵活性,以便它们不需要彼此进行直接通信
  6. 从表现层暴露上下文给业务层以获得业务服务
  7. 管理从业务层到表现层的实现

转载于:https://www.cnblogs.com/x_wukong/p/3933576.html

表现层(jsp)、持久层(类似dao)、业务层(逻辑层、service层)、模型(javabean)、控制层(action)...相关推荐

  1. service 层 拼接的html 代码如何直接返回_软件系统的分层,有效降低层与层之间的依赖...

    在分解复杂的软件系统时,架构师和程序员用得最多的技术之一就是分层.个人学习开发的时候,软件系统大多数是三层架构,也就是大家非常熟悉的表现层.领域层(业务层).数据源层.随着互联网的发展,智能手机普及手 ...

  2. Spring MVC控制层的返回类型--String类型与Bean类型

    SpringMVC控制层的返回类型形式多样,现拿其中的两种--String类型与Bean类型作以说明. 一.测试项目的结构 说明:(jsp的名字没起好) 控制层:UserController.java ...

  3. 业务层 java_表现层(jsp)、持久层(类似dao)、业务层(逻辑层、service层)、模型(javabean)、控制层(action)...

    为了实现web层(struts)和持久层(Hibernate)之间的松散耦合,我们采用业务代表(Business Delegate)和DAO(Data Access Object)两种模式.DAO模式 ...

  4. 表现层、持久层、业务层

    为了实现web层(struts)和持久层(Hibernate)之间的松散耦合,我们采用业务代表(Business Delegate)和DAO(Data Access Object)两种模式.DAO模式 ...

  5. 面向对象——三层架构(表现层、业务层、持久层)

    ① 持久层:采用DAO模式,建立实体类和数据库表映射(ORM映射).也就是哪个类对应哪个表,哪个属性对应哪个列.持久层 的目的就是,完成对象数据和关系数据的转换. ② 业务层:采用事务脚本模式.将一个 ...

  6. java系统项目分为哪五大层次?控制层_业务_一个项目中说系统分为表现层、控制层、逻辑层、DAO层和最终数据库五层架构-转...

    表现层就是看到的东西,比如你现在看到的当前页面 控制层就将你的请求从页面传到后台代码 逻辑层就是处理你的请求的代码 DAO层就是将数据存到数据库中的代码 数据库就是数据库了,存东西用的 ,DAO层就是 ...

  7. 三层架构理解(表现层、业务层、持久层)

    三层架构:即表现层.业务层.持久层. 大话一下这三个层. 举例1+1=? 你输入1+1=?的地方就是表现层,业务层把1+1=?拆成"1","+","1 ...

  8. SSH三种框架及表示层、业务层和持久层的理解

    SSH:Struts(表示层)+Spring(业务层)+Hibernate(持久层) 在项目开发的过程中,有时把整个项目分为三层架构,其中包括: 1.表示层(UI). 2.业务逻辑层(BLL) 3.数 ...

  9. JAVA表示层,业务层,持久层的框架分别有哪些

    JAVA表示层,业务层,持久层的框架分别有哪些 1.表示层 JSP,Freemark,Velocity, 2.控制层 Struts,Struts2 3.持久层 Hibernate.Mybatis.My ...

最新文章

  1. 好久没有看到这么有建设性德文章,由衷地赞叹《知其所以然地学习(以算法学习为例)》-By 刘未鹏(pongba)
  2. DPDK uio驱动实现(二十)
  3. createprocess 系统找不到指定的文件_windows找不到gpedit.msc请确定文件名
  4. 华为eNSP模拟器上实现FTP服务
  5. QT5之修改程序图标
  6. python编程入门教学-史上最全Python编程基础入门教程
  7. Python中的闭包与参数引用域
  8. Linux命令大全:grep命令
  9. 49. PHP 页面静态化(2)
  10. 记录一个对外接口签名问题
  11. 2.6 列昂惕夫投入产出模型(第2章矩阵代数)
  12. java素数的判断方法_2java判断素数
  13. 国际c语言乱码大赛PDF,国际C 语言乱码大赛(IOCCC)获奖作品
  14. 分享5个最好的在线wap浏览器|wap浏览器软件
  15. android开发---9.MediaPlayer实现音乐播放的demo
  16. c语言入门ppt演示,c语言学习ppt-C语言入门教程ppt(共434页)免费版【精品课件】-东坡下载...
  17. 西游记中荆棘岭五个树精
  18. Kafka consumer多线程下not safe for multi-threaded access问题
  19. JEB2插件教程之一JEB2AutoRenameByTypeInfo.py
  20. 《区块链技术与应用》北大肖臻老师——课程笔记【4-5】

热门文章

  1. replace 替换字符串
  2. 我的选车经历--学习比经验更重要
  3. php的yii简介,yii
  4. java如何创建一个两个数的队列_java线程池 如何构建一个线程立即到拉到MAX数量跑业务,线程到MAX了,额外的队列可以存储任务的线程池...
  5. linux centos删除安装的包,CentOS yum认为已删除的软件包仍在安装中
  6. 6个座位办公室最佳位置_一天中6个最佳的护肤时间,你知道几个?
  7. Nginx负载均衡策略之url_hash
  8. kafka消息消费原理演示
  9. response的运行过程
  10. 百万数据报表:分析以及解决办法