为了实现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 的职责所在:

管理用户的请求和响应
提供一个控制起来将调用委托到业务逻辑和其他上游处理
将来自于抛出例外的其他层的例外处理到Struts Action 中
组装可以在视图中表现的模型对象
执行UI 校验
下面是一些经常可以使用Struts进行编码但是不应该和表现层关联的事情:

直接和数据库交互,比如JDBC 调用
与应用相关的业务逻辑和校验
事务管理
在表现层中引入这些类型的代码将导致类型耦合和维护负担。

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

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

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

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

表现层、持久层、业务层相关推荐

  1. 控制层远程调用业务层_如何应用数据访问服务层分离系统中的业务层和持久层之间耦合关系...

    软件项目实训及课程设计指导--如何应用数据访问服务层分离业务层和持久层之间耦合关系 作者已经在本系列文章<软件项目实训及课程设计指导--如何正确地设计J2EE应用系统持久层中的各个组件结构及关系 ...

  2. view是视图层+action是控制层+service是业务层+dao是数据访问层。

    举例1:MVC 1)最上面的一层,是直接面向最终用户的"视图层"(View).它是提供给用户的操作界面,是程序的外壳. 2)最底下的一层,是核心的"数据层"(M ...

  3. 表现层 业务层 持久层 web层 service层 dao层的相关概念描述

    我们的架构一般分为两种, 一种是C/S(客户端/服务器),另一种是B/S(浏览器/服务器). 在我接下来学习的SpringMVC种,几乎都是B/S架构开发的. 其标准的三层架构中,一般分为:表现层,业 ...

  4. JAVA三层架构,持久层,业务层,表现层的理解

    转自:https://blog.csdn.net/ljf_study/article/details/64443653 SSH: Struts(表示层)+Spring(业务层)+Hibernate(持 ...

  5. 写写关于持久层,业务层和控制层的自己看法

    写写关于持久层,业务层和控制层的自己看法 1:持久层 2:业务层 3:控制层 1:持久层 持久层也叫DAO层,主要工作是负责给数据库做CRUD操作,并把这些数据库操作提供给业务层做处理.如果比作做饭的 ...

  6. MVC中业务层是否应该有个基类?它有什么作用?

    项目架构N层结构中,业务层无疑是比较灵活多变,与数据库层紧密联系,又同时约束WEB层的中间层,它是否应该有个基类,而如果有,那它的作用又是什么呢? 这就是今天要说的. 首先,我认为每个层都应该有个基类 ...

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

    转自:http://www.blogjava.net/jiabao/archive/2007/04/08/109189.html 为了实现web层(struts)和持久层(Hibernate)之间的松 ...

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

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

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

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

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

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

最新文章

  1. 「AI初识境」深度学习模型中的Normalization,你懂了多少?
  2. SQLServer错误:过程 sp_addextendedproperty,第 xxx 行对象无效。'dbo.xxx.xxx' 不允许有扩展属性,或对象不存在。...
  3. 2016中国信息通信大数据大会召开在即,精彩看点提前揭晓
  4. python文本进度条代码解释_python动态文本进度条的实例代码
  5. 某电子工厂老板感叹创业开厂人生
  6. android ide 下载
  7. 创业基础(第7章 创业计划) 来自高校:全国大学生创新创业实践联盟 分类:创新创业 学习规则:按序学习
  8. Mysql 数据库操作系统 官网 安装教程
  9. 黑马程序员—银行调度系统
  10. 一文了解常用效率记笔记软件(超过20款含有图片和双向链笔记)
  11. 惠普计算机如何用u盘引导启动不了系统安装系统,惠普笔记本进BIOS设置U盘启动教程...
  12. java 序列化版本号_序列化版本号serialVersionUID的作用
  13. 2020年计算机竞赛姜子敬,初赛公示_2020年全国高校计算机能力挑战赛
  14. 数字孪生医院:一个围绕着智慧医院决策的建模、管理和行动闭环的全新方式...
  15. 触摸屏坏了有哪些现象_触摸屏常见的故障及解决方法(实用)
  16. python spss_SPSS语法调用Python,让spss插上翅膀
  17. 一个很Nice的Android Banner轮播图库
  18. RecyclerView多级目录实现
  19. 360助手 android版,360手机助手
  20. 【数据结构与算法 8】递归之迷宫问题

热门文章

  1. 驱动开发实战之TcpClient
  2. html 设置滚动条颜色,CSS设置滚动条颜色步骤
  3. ES java 根据条件查询总数
  4. GetProperty反射赋值SetValue报错:类型“System.Byte”的对象无法转换为类型“System.Nullable`1[System.Int32]”。
  5. Java面试题--多线程
  6. 区块链与大数据有着怎样的关系?
  7. Mysql的exist()用法
  8. Python工程师薪资再次刷新IT标准,月入20K,眼红了么?
  9. laravel 项目启动方式
  10. 清除浮动学习和利用PS切图练习