几乎所有结构良好的软件都使用了分层设计。分层设计将一个应用程序根据技术职能分为几 个内聚的部分,从而将某种特定技术或接口的实现细节与其他部分分离开来。分层设计可以用任 何一种强壮的编程语言来实现。图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. MyEclipse使用总结——MyEclipse文件查找技巧 ctrl+shift+R ctrl+H

    一.查找文件 使用快捷键[ctrl+shift+R]弹出弹出文件查找框,如下图所示: 二.查找包含某个字符串的文件 使用快捷键[ctrl+H]在弹出对话框中选File Search选项,然后在第一个文 ...

  2. Maven学习总结(四)——Maven核心概念--转载

    一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Maven坐标主要组成 groupId:组织标识(包名) artifactId:项目名称 ver ...

  3. Windows Server 2016 桌面环境的自动配置脚本

    除非学习要求,还是建议使用Windows 10 LTSB 2016或其他桌面系统. github:https://github.com/m2nlight/WindowsServerToWindowsD ...

  4. 负margin在布局中的运用

    一.左右栏宽度固定,中间栏宽度自适应 <!DOCTYPE html> <html> <head lang="en"> <meta char ...

  5. MyBatis crud操作

    Test2.java package com.mycom.mybatis_1.crud; import java.util.List; import org.apache.ibatis.session ...

  6. Delphi -- Compiler helper for initializing/finalizing variable

    it CompilerhelperForInitializingFinalizingVariable; interface { Compiler helper for initializing/fin ...

  7. 在VisualStudio中应该使用什么字体

    转自:http://blog.csdn.net/bclz_vs/article/details/6607695 字体通常分为几个主要类型 San-Serif:无衬线字体 Serif:有衬线的字体 Mo ...

  8. SQLServer公历转农历函数(1900年-2049年)

    ALTER   FUNCTION   [dbo].[f_SysGetLunar](      @solarDay   DATETIME)            RETURNS   varchar(20 ...

  9. 记一次苦逼的SQL查询优化

    最近在维护公司项目时,需要加载某页面,总共加载也就4000多条数据,竟然需要35秒钟,要是数据增长到40000条,我估计好几分钟都搞不定.卧槽,要我是用户的话估计受不了,趁闲着没事,就想把它优化一下, ...

  10. 【卡西欧Fx-5800p】市场分析 ppt

    一.ppt视频 二.大概内容 1:2010年的4万亿救市政策和 2011年4月后财政收缩政策 2:2011-7-23温州动车追尾事故70%的公路高铁等基础建设项目停缓建 ·····