表现层(jsp)、持久层(dao)、业务层(逻辑层、service)
转自: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
的职责所在:
- 管理用户的请求和响应
- 提供一个控制起来将调用委托到业务逻辑和其他上游处理
- 将来自于抛出例外的其他层的例外处理到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代替,而不需要修改其它层中的代码。
业务层应该负责下面的问题:
- 处理应用的业务逻辑和业务校验
- 管理事务
- 允许与其他层进行交互的接口
- 管理业务级对象之间的依赖性
- 加入了表现和持久层之间的灵活性,以便它们不需要彼此进行直接通信
- 从表现层暴露上下文给业务层以获得业务服务
- 管理从业务层到表现层的实现
表现层(jsp)、持久层(dao)、业务层(逻辑层、service)的更多相关文章
- 小程序视图层(xx.xml)和逻辑层(xx.js)
整个系统分为两块视图层(View)和逻辑层(App Service) 框架可以让数据与视图非常简单地保持同步.当做数据修改的时候,只需要在逻辑层修改数据,视图层就会做相应的更新. 通过这个简单的例子来 ...
- 微信小程序学习笔记(4)--------框架之逻辑层
逻辑层 逻辑层(App Service):小程序框架的逻辑层是由JavaScript编写的,逻辑层将数据进行处理后发送给视图层,同时接受视图层的事件反馈. App进行程序注册,Page进行页面注册 g ...
- 表现层(jsp)、持久层(类似dao)、业务层(逻辑层、service层)、模型(javabean)、控制层(action)
转自:http://www.blogjava.net/jiabao/archive/2007/04/08/109189.html 为了实现web层(struts)和持久层(Hibernate)之间的松 ...
- JavaEE中表现层、持久层、业务层的职责分析(转载)
表现层.持久层.业务层 注:本文转载于:http://www.blogjava.net/jiabao/archive/2007/04/08/109189.html 为了实现web层(struts)和持 ...
- 一个项目中说系统分为表现层、控制层、逻辑层、DAO层和最终数据库五层架构-转
表现层就是看到的东西,比如你现在看到的当前页面控制层就将你的请求从页面传到后台代码逻辑层就是处理你的请求的代码DAO层就是将数据存到数据库中的代码数据库就是数据库了,存东西用的 ,DAO层就是将访问数 ...
- MyBatis知多少(6)表现层与业务逻辑层
表现层 表现层负责向最终用户展示应用程序的控制方式以及数据.它还要负责所有信息的布局和格式.今天,商业应用程序最流行的表现方式应该算是Web前端了,它使用HTML和JavaScript并通 过Web浏 ...
- 基于Spring4+Hibernate4的通用数据访问层+业务逻辑层(Dao层+Service层)设计与实现!
基于泛型的依赖注入.当我们的项目中有很多的Model时,相应的Dao(DaoImpl),Service(ServiceImpl)也会增多. 而我们对这些Model的操作很多都是类似的,下面是我举出的一 ...
- JSP业务逻辑层
经典的三层架构:表示层.业务逻辑层和数据访问层 具体的区分方法 1:数据访问层:主要看你的数据层里面有没有包含逻辑处理,实际上他的各个函数主要完成各个对数据文件的操作.而不必管其他操作. 2:业务逻辑 ...
- 表现层 JSP 页面实现
一.实验介绍 1.1 实验内容 本节课程主要利用 easyUI 实现系统的前端页面. 1.2 实验知识点 easyUI JavaScript html 1.3 实验环境 JDK1.8 Eclipse ...
随机推荐
- P3964-[TJOI2013]松鼠聚会【计算几何】
正题 题目链接:https://www.luogu.com.cn/problem/P3964 题目大意 给出\(n\)个点,求一个点使得它到所有点的切比雪夫距离和最小. \(0\leq n\leq 1 ...
- Redis事件机制
Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件: 文件事件:Redis通过套接字与客户端连接,文件事件是服务器对套接字操作的抽象. 时间事件:Redis服务器中的一些操作需要给定的时间 ...
- SpringBoot 如何进行限流?老鸟们都这么玩的!
大家好,我是飘渺.SpringBoot老鸟系列的文章已经写了四篇,每篇的阅读反响都还不错,那今天继续给大家带来老鸟系列的第五篇,来聊聊在SpringBoot项目中如何对接口进行限流,有哪些常见的限流算 ...
- xLua中C#调用Lua
C#调用Lua 一.前提 这里使用的是XLua框架,需要提前配置xlua,设置加载器路径: 可以参考之前的Blog:<xlua入门基础>: 二.C#调用Lua全局变量 lua中所有的全局变 ...
- Parcel Fabric Tools(宗地结构工具)
宗地结构工具 1.图层和表视图 # Process: 创建宗地结构图层 arcpy.MakeParcelFabricLayer_fabric("", 输出图层) # Process ...
- 题解 「2017 山东一轮集训 Day7」逆序对
题目传送门 Description 给定 $ n, k $,请求出长度为 $ n $ 的逆序对数恰好为 $ k $ 的排列的个数.答案对 $ 10 ^ 9 + 7 $ 取模. 对于一个长度为 $ n ...
- PAT (Basic Level) Practice (中文)1014 福尔摩斯的约会 (20分)
1014 福尔摩斯的约会 (20分) 带侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hys ...
- Python实现可视化操作
# Author kevin_hou #简单的GUI文本编辑器 from tkinter import * from tkinter.scrolledtext import ScrolledText ...
- Less-(5~7) error based
Less-5: 核心语句: 我们注意到,当输入正确时,并不能获得有价值的回显.好在出现错误时,会爆出错误内容: 于是,使用报错注入: 1' and updatexml(1,concat(0x7e,( ...
- 修改git仓库的远程地址
在我们开发的过程中,代码一般是由 git 来管理的,但有些时候我们的 git 仓库的地址可能发生了变换,比如我们使用的 gitLab 地址发生了变化,那么这个时候如何来将原项目的 git 地址进行修改 ...