几乎所有结构良好的软件都使用了分层设计。分层设计将一个应用程序根据技术职能分为几 个内聚的部分,从而将某种特定技术或接口的实现细节与其他部分分离开来。分层设计可以用任 何一种强壮的编程语言来实现。图1-2给出了一个典型的的高级视图,该 图对于许多商业应用程序都是有用的。

下图中的箭头读作“依赖于”或“使用”。这种分层设计其实来源于迪米特法则,该法则的一种表述方式就是,“每一层都应该只对那些与自己紧密相关的层有有限的了解。”

  每一层都只与自己的直接下层“交互”。这就保证了依赖流(dependency flow)只有一个方向,从而避免了那种在没有分层设计的应用程序中非常普遍的披萨式的代码。

MyBatis是一个持久层框架。持久层位于应用程序的业务逻辑层和数据库之间。这种分离非常重要,它保证了持久化策略不会混入业务逻辑代码,反之亦然。这种分离的好处就在于你的代码将更加容易维护,因为它允许对象模型的演化不依赖于数据库设计。

  虽然MyBatis关注的主要是持久层,但理解应用程序的整体架构中的每个层仍然是很重要的。 虽然通过分层设计可以将关注点分离,从而将对任何一种特定实现的依赖都降到最低(甚至没有),但如果你认为这样就可以不管其他层的存在,不顾与其他层的交互,那就太天真了。不论应用程序设计得多么完美,你都必须明白层与层之间一定存在某些间接的行为关联。以下各节将 讨论应用程序的各个层以及MyBatis与这些层的关系。

业务对象模型

  业务对象是一个应用程序的所有其他部分的基础。它是问题域在面向对象方法学中的一种表现,因此构成业务对象模型的各个类有时也被称为领域类(domain class)。所有其他层都使用业务对象模型来表现数据和执行某些特定的业务逻辑功能。

  应用程序的设计者们通常都是从业务对象模型的设计开始的。即使从较高的层次上看,业务对象模型中定义的各个类也都来源于我们的问题域中的名词。随着应用程序越来越复杂,类代表更抽象的概念。

  业务对象模型类中当然也可能包括一些逻辑,但它们决不能包含任何用于访问其他层(特别是表现层和持久层)的代码。此外,这个业务对象模型绝对不能依赖于其他任何一层。其他层可 以使用业务对象模型——但永远不能反过来。

  像MyBatis这样的持久层通常会使用业务逻辑对象来表现存储在数据库中的数据。业务对象模 型中的这些领域类将成为持久化方法(persistence method)的参数和返回值。也正是因为这个原因,这些类有时也被称为数据传输类(data transfer object, DTO)。虽然数据传输并不是它们唯 一的作用,但从持久化框架的角度看,这个名字还是相当合适的。

系列文章:

MyBatis知多少(1)

MyBatis知多少(2)

MyBatis知多少(3)

MyBatis知多少(4)MyBatis的优势

MyBatis知多少(5)业务对象模型的更多相关文章

  1. MyBatis知多少(6)表现层与业务逻辑层

    表现层 表现层负责向最终用户展示应用程序的控制方式以及数据.它还要负责所有信息的布局和格式.今天,商业应用程序最流行的表现方式应该算是Web前端了,它使用HTML和JavaScript并通 过Web浏 ...

  2. MyBatis知多少(26)MyBatis和Hibernate区别

    iBatis和Hibernate之间有着较大的差异,但两者解决方案很好,因为他们有特定的领域.我个人建议使用MyBatis的,如果: 你想创建自己的SQL,并愿意维持他们. 你的环境是由关系数据模型驱 ...

  3. MyBatis知多少(26)调试

    这是很容易,同时与iBATIS的工作程序进行调试. iBATIS有内置的日志支持,并适用于下列日志库,并在这个顺序搜索他们. Jakarta Commons日志记录(JCL). Log4J JDK 日 ...

  4. MyBatis知多少(25)动态SQL

    使用动态查询是MyBatis一个非常强大的功能.有时你已经改变WHERE子句条件的基础上你的参数对象的状态.在这种情况下的MyBatis提供了一组可以映射语句中使用,以提高SQL语句的重用性和灵活性的 ...

  5. MyBatis知多少(24)存储过程

    使用MyBatis配置来调用存储过程.为了理解这一章,首先需要了解我们是如何在MySQL中创建一个存储过程. 在继续对本节学习之前,可以自行学习MySQL存储过程. 我们已经在MySQL下有EMPLO ...

  6. MyBatis知多少(23)MyBatis结果映射

    resultMap的元素是在MyBatis的最重要和最强大的元素.您可以通过使用MyBatis的结果映射减少高达90%的JDBC编码,在某些情况下,可以让你做JDBC不支持的事情. ResultMap ...

  7. MyBatis知多少(22)MyBatis删除操作

    本节从表中使用MyBatis删除记录. 我们已经在MySQL下有EMPLOYEE表: CREATE TABLE EMPLOYEE ( id INT NOT NULL auto_increment, f ...

  8. MyBatis知多少(21)更新操作

    上一章展示了如何使用MyBatis对表进行读取操作.本章将告诉你如何在一个表中使用MyBatis更新记录. 我们已经在MySQL下有EMPLOYEE表: CREATE TABLE EMPLOYEE ( ...

  9. MyBatis知多少(20)MyBatis读取操作

    上篇展示了如何使用MyBatis执行创建操作表.本章将告诉你如何使用MyBatis来读取表. 我们已经在MySQL下有EMPLOYEE表: CREATE TABLE EMPLOYEE ( id INT ...

随机推荐

  1. FreeCodeCamp 高级算法(个人向)

    freecodecamp 高级算法地址戳这里. freecodecamp的初级和中级算法,基本给个思路就能完成,而高级算法稍微麻烦了一点,所以我会把自己的解答思路写清楚,如果有错误或者更好的解法,欢迎 ...

  2. git 日志格式化

    alias.lg=log --graph --pretty=format:'%Cred%H%Creset @%C(yellow)%d%Creset %n Author: %cn <%ce> ...

  3. Hibernate入门5持久化对象关系和批量处理技术

    Hibernate入门5持久化对象关系和批量处理技术 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv 前言: 前面学习了Hiberna ...

  4. Java并发包中Lock的实现原理

    1. Lock 的简介及使用 Lock是java 1.5中引入的线程同步工具,它主要用于多线程下共享资源的控制.本质上Lock仅仅是一个接口(位于源码包中的java\util\concurrent\l ...

  5. SqlServer2008R2用Windows身份登录18456错误解决

    // 重装系统后发现SqlServer2008R2使用Windows身份验证不能进行连接,如下图: 以前经常会碰到SqlServer 身份验证连接失败,Windows身份验证的连接失败还是第一次,试了 ...

  6. Xiaomi 手机

  7. Flv.js

    Flv.js 是 HTML5 Flash 视频(FLV)播放器,纯原生 JavaScript 开发,没有用到 Flash.由 bilibili 网站开源. 该项目依托于 Media Source Ex ...

  8. 致第一次安装RIME的你

    转载自百度RIME吧,作者:半月湾C 原帖地址:http://tieba.baidu.com/p/3288634121   序言 很喜欢小狼毫输入法,喜欢他的简洁,美观以及超强悍的个人定制功能.关于 ...

  9. android里TextView加下划线的几种方式

    如果是在资源文件里: <resources> <string name="hello"><u>phone:0123456</u>&l ...

  10. C# inline-asm / 嵌入x86汇编

    C#可不可以嵌入汇编 可以 在我眼中C#作为一个介于中上层语言是不可能不可以 置入汇编代码的 为什么会被我认为中上层语言呢 从C#保留指针就可以看出 我知 道有很多人一定不会相信C#可以使用汇编代码 ...