MyBatis知多少(5)业务对象模型
几乎所有结构良好的软件都使用了分层设计。分层设计将一个应用程序根据技术职能分为几 个内聚的部分,从而将某种特定技术或接口的实现细节与其他部分分离开来。分层设计可以用任 何一种强壮的编程语言来实现。图1-2给出了一个典型的的高级视图,该 图对于许多商业应用程序都是有用的。
下图中的箭头读作“依赖于”或“使用”。这种分层设计其实来源于迪米特法则,该法则的一种表述方式就是,“每一层都应该只对那些与自己紧密相关的层有有限的了解。”
每一层都只与自己的直接下层“交互”。这就保证了依赖流(dependency flow)只有一个方向,从而避免了那种在没有分层设计的应用程序中非常普遍的披萨式的代码。
MyBatis是一个持久层框架。持久层位于应用程序的业务逻辑层和数据库之间。这种分离非常重要,它保证了持久化策略不会混入业务逻辑代码,反之亦然。这种分离的好处就在于你的代码将更加容易维护,因为它允许对象模型的演化不依赖于数据库设计。
虽然MyBatis关注的主要是持久层,但理解应用程序的整体架构中的每个层仍然是很重要的。 虽然通过分层设计可以将关注点分离,从而将对任何一种特定实现的依赖都降到最低(甚至没有),但如果你认为这样就可以不管其他层的存在,不顾与其他层的交互,那就太天真了。不论应用程序设计得多么完美,你都必须明白层与层之间一定存在某些间接的行为关联。以下各节将 讨论应用程序的各个层以及MyBatis与这些层的关系。
业务对象模型
业务对象是一个应用程序的所有其他部分的基础。它是问题域在面向对象方法学中的一种表现,因此构成业务对象模型的各个类有时也被称为领域类(domain class)。所有其他层都使用业务对象模型来表现数据和执行某些特定的业务逻辑功能。
应用程序的设计者们通常都是从业务对象模型的设计开始的。即使从较高的层次上看,业务对象模型中定义的各个类也都来源于我们的问题域中的名词。随着应用程序越来越复杂,类代表更抽象的概念。
业务对象模型类中当然也可能包括一些逻辑,但它们决不能包含任何用于访问其他层(特别是表现层和持久层)的代码。此外,这个业务对象模型绝对不能依赖于其他任何一层。其他层可 以使用业务对象模型——但永远不能反过来。
像MyBatis这样的持久层通常会使用业务逻辑对象来表现存储在数据库中的数据。业务对象模 型中的这些领域类将成为持久化方法(persistence method)的参数和返回值。也正是因为这个原因,这些类有时也被称为数据传输类(data transfer object, DTO)。虽然数据传输并不是它们唯 一的作用,但从持久化框架的角度看,这个名字还是相当合适的。
系列文章:
MyBatis知多少(5)业务对象模型的更多相关文章
- MyBatis知多少(6)表现层与业务逻辑层
表现层 表现层负责向最终用户展示应用程序的控制方式以及数据.它还要负责所有信息的布局和格式.今天,商业应用程序最流行的表现方式应该算是Web前端了,它使用HTML和JavaScript并通 过Web浏 ...
- MyBatis知多少(26)MyBatis和Hibernate区别
iBatis和Hibernate之间有着较大的差异,但两者解决方案很好,因为他们有特定的领域.我个人建议使用MyBatis的,如果: 你想创建自己的SQL,并愿意维持他们. 你的环境是由关系数据模型驱 ...
- MyBatis知多少(26)调试
这是很容易,同时与iBATIS的工作程序进行调试. iBATIS有内置的日志支持,并适用于下列日志库,并在这个顺序搜索他们. Jakarta Commons日志记录(JCL). Log4J JDK 日 ...
- MyBatis知多少(25)动态SQL
使用动态查询是MyBatis一个非常强大的功能.有时你已经改变WHERE子句条件的基础上你的参数对象的状态.在这种情况下的MyBatis提供了一组可以映射语句中使用,以提高SQL语句的重用性和灵活性的 ...
- MyBatis知多少(24)存储过程
使用MyBatis配置来调用存储过程.为了理解这一章,首先需要了解我们是如何在MySQL中创建一个存储过程. 在继续对本节学习之前,可以自行学习MySQL存储过程. 我们已经在MySQL下有EMPLO ...
- MyBatis知多少(23)MyBatis结果映射
resultMap的元素是在MyBatis的最重要和最强大的元素.您可以通过使用MyBatis的结果映射减少高达90%的JDBC编码,在某些情况下,可以让你做JDBC不支持的事情. ResultMap ...
- MyBatis知多少(22)MyBatis删除操作
本节从表中使用MyBatis删除记录. 我们已经在MySQL下有EMPLOYEE表: CREATE TABLE EMPLOYEE ( id INT NOT NULL auto_increment, f ...
- MyBatis知多少(21)更新操作
上一章展示了如何使用MyBatis对表进行读取操作.本章将告诉你如何在一个表中使用MyBatis更新记录. 我们已经在MySQL下有EMPLOYEE表: CREATE TABLE EMPLOYEE ( ...
- MyBatis知多少(20)MyBatis读取操作
上篇展示了如何使用MyBatis执行创建操作表.本章将告诉你如何使用MyBatis来读取表. 我们已经在MySQL下有EMPLOYEE表: CREATE TABLE EMPLOYEE ( id INT ...
随机推荐
- atitit.提升备份文件复制速度(4) ---数据挖掘 获取回收站文件列表
atitit.) ---数据挖掘 获取回收站文件列表 1. 放入回收站的原理and 1 2. info2文件文件结构 1 3. 获得文件列表2个法: 正则表达式or解析 1 4. 路径正则表达式[a- ...
- Abstract Server模式,Adapter模式和Bridge模式
简易的台灯 Abstract Server模式 谁拥有接口. 接口属于它的客户,而不是它的派生类. 接口和客户之间的逻辑关系,强于接口和其派生类的逻辑关系. 逻辑关系和实体关系的强度是不一致的.在实体 ...
- hdu 1548 楼梯 bfs或最短路 dijkstra
http://acm.hdu.edu.cn/showproblem.php?pid=1548 Online Judge Online Exercise Online Teaching Online C ...
- iscroll初体验
引入 iscroll是什么?多的概念性让人看不懂的东西就不说了因为看了也可能看不明白,iscroll主要用于移动端设备,主要包括以下的应用场合: 缩放 拉动刷新 速度和性能提升 精确捕捉元素 自定义滚 ...
- android: 使用通知
8.1 使用通知 通知(Notification)是 Android 系统中比较有特色的一个功能,当某个应用程序希望向 用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现.发 ...
- ZPL打印中文信息
博客来源:http://www.cnblogs.com/Geton/p/3595312.html 相信各位在实际的项目中,需要开发打条码模块的也会有不少,很多同行肯定也一直觉得斑马打印机很不错,但是Z ...
- file_get_contents高級用法
首先解決file_get_contents的超時問題,在超時返回錯誤後就象js中的settimeout那樣進行一次嘗試,錯誤超過3次或者5次後就確認為無法連線伺服器而徹底放棄.這裡就簡單介紹兩種解決方 ...
- mac工具收藏
1.office字体兼容 http://mac.pcbeta.com/thread-32703-1-1.html
- 让input支持 ctrl v上传粘贴图片? 让input支持QQ截图或剪切板中的图像数据(Java实现保存)
原理:监听粘贴 → 获取粘贴内容 → 将内容上传 → 抓取后返回替换至input 我们在生产中用到的界面: 测试地址 http://sms.reyo.cn 用户名:aa 密码:123456 以下是PH ...
- Java SimpleDateFormat[转]
[补充] [转] http://stackoverflow.com/questions/2603638/why-cant-this-simpledateformat-parse-this-date-s ...