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.web 推送实现方案集合
atitit.web 推送实现方案集合 1. 俩中模式 Push/Pull 1 2. 需要实现的特性 2 2.1. 推送消息广播. 2 2.2. 推送定向消息. 2 2.3. 提供连接上线前.上线.下 ...
- 菜鸟日记-HTML
第一部分 HTML---Hyper Text Markup Language--超文本标记语言 1.HTML标准:<html> <head> 网页上的控制信息 <tit ...
- unsigned long类型转换为CString出现的问题
开发工具:VC2010 财务程序读卡时发现有的卡片读出的卡号异常,代码如下: // 读卡序列号 unsigned long cardNo; CICReader reader(ICREADER_TYPE ...
- php内存缓存
1.文件方式缓存 哈希子目录缓存 2.APC APC,全称是Alternative PHP Cache,官方翻译叫”可选PHP缓存”.它为我们提供了缓存和优化PHP的中间代码的框架. APC的缓存分两 ...
- 奇怪吸引子---WimolBanlue
奇怪吸引子是混沌学的重要组成理论,用于演化过程的终极状态,具有如下特征:终极性.稳定性.吸引性.吸引子是一个数学概念,描写运动的收敛类型.它是指这样的一个集合,当时间趋于无穷大时,在任何一个有界集上出 ...
- 向Spotify学习如何设计产品(转)
导语:Spotify是瑞典的精益创业项目,同时保持着很棒的产品交付记录.一般在产品上线之后,开发者才知道人们喜不喜欢它.Spotify如何解决这个问题? 本文转自 kent.zhu's Blog,原文 ...
- 2014 Hangjs 见闻流水账第一天
前言 6月21日~6月22日, 第一次跑远门去参加一个大会(广州 -> 杭州),本来打算,在火车的回来的路上,把这两天的东西记录一下,不过,火车上的环境实在恶劣,同时也高估了自己的专注力,所以, ...
- Maven - 项目结构
一个基础的Maven Java项目结构图如下所示: Project Name |__________ pom.xml |__________ src | |__ ...
- Codeforces Round #292 (Div. 1) B. Drazil and Tiles 拓扑排序
B. Drazil and Tiles 题目连接: http://codeforces.com/contest/516/problem/B Description Drazil created a f ...
- 推荐一个C#代码混淆器 .NET Reactor【转】
C#的代码辛苦写出来之后,一个反射工具,就可以完全显露出来. 当然,在做项目时,这个功能还不错.因为我就曾在一个项目上使用C#,没有进行任何混淆.结果在项目二年多之后,需要做一些调整,自己保存的源代码 ...