MyBatis知多少(4)业务对象模型

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

时间: 2024-10-27 00:45:10

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

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

表现层 表现层负责向最终用户展示应用程序的控制方式以及数据.它还要负责所有信息的布局和格式.今天,商业应用程序最流行的表现方式应该算是Web前端了,它使用HTML和JavaScript并通 过Web浏览器来满足用户的界面外观需求. Web应用程序的优势包括跨平台兼容性.易部署和可扩展.amazon.com就是Web应用程序的—个极好的例子,它允许你在线购书.这就是Web应用程序的一个绝佳应用,因为不可能要求用 户为了买一本书而去下载一个应用程序. 当需要高级的用户控件或者复杂的数据操纵时,Web

MyBatis知多少(18)MyBatis系统

小型.简单系统 小型应用程序通常只涉及单个数据库,只有一些相当简单的用户界面和领域模型.它的业务逻辑非常简单,甚至对一些简单的CRUD (Create, Read, Update, Delete:增删查改)应用程序来说可能根本就不存在.MyBatis之所以非常适合于小型应用程序,有3个原因. 第一,MyBatis本身就很小并且简单.它不需要服务器或者其他任何类型的中间件.根本不需要任何额外的基础设施.MyBatis也没有任何第三方依赖.MyBatis的最简安装只需 要2个JAR文件,总计不过37

MyBatis知多少(17)MyBatis和JDBC

有了MyBatis,就不再需要编写JDBC代码了.像JDBCT这样的API的确非常强大,但使用起来总不免觉得太过繁琐.代码清单给出了一个使用JDBC的示例. 从这个例子中很容易看出,JDBC API会产生许多额外的开销.尽管如此,每一行代码又都是必不可少的,所以要减少代码量还真不是一件容易的事情.最多也只不过是将其中的一些代码 挪到某个实用方法中,最明显的就是那些关闭资源(如PreparedStatement和 ResultSet)的代码. 其实,如果使用MyBatis,MyBatis在后台也是

MyBatis知多少(11)企业数据库

企业数据库比应用程序数据库更大,其外部影响也更大.它们与其他系统之间存在更多的关系,包括依赖关系和被依赖关系.这些关系可能是Web应用程序与报表工具之间的,但也很有可 能是与其他的复杂系统和数据库的接口.在企业数据库中,不仅仅存在远比应用程序数据库多得 多的外部接口,而且这些接口的作用方式也大不相同.一些接口可能是用于每晚批量加载数据的 接口,其他的则可能是实时事务处理接口.由于这些原因,企业数据库本身可能实际上就是由不止一个数据库组成的.下图从较高的层次描绘了一个企业数据库的例子. 企业数据库

MyBatis知多少(25)动态SQL

使用动态查询是MyBatis一个非常强大的功能.有时你已经改变WHERE子句条件的基础上你的参数对象的状态.在这种情况下的MyBatis提供了一组可以映射语句中使用,以提高SQL语句的重用性和灵活性的动态SQL标签. 所有的逻辑是使用一些额外的标签放在:XML文件.下面是一个例子,其中的SELECT语句将努力在两个方面: 如果想传递一个ID,然后它会返回所有与该ID的记录, 否则,将返回所有雇员ID为NULL的记录. <?xml version="1.0" encoding=&q

MyBatis知多少(17)MyBatis读取操作

上篇展示了如何使用MyBatis执行创建操作表.本章将告诉你如何使用MyBatis来读取表. 我们已经在MySQL下有EMPLOYEE表: 1 CREATE TABLE EMPLOYEE ( 2 id INT NOT NULL auto_increment, 3 first_name VARCHAR(20) default NULL, 4 last_name VARCHAR(20) default NULL, 5 salary INT default NULL, 6 PRIMARY KEY (i

MyBatis知多少(19)MyBatis操作

若要使用iBATIS执行的任何CRUD(创建,写入,更新和删除)操作,需要创建一个的POJO(普通Java对象)类对应的表.本课程介绍的对象,将“模式”的数据库表中的行. POJO类必须实现所有执行所需的操作所需的方法. 我们已经在MySQL下有EMPLOYEE表: 1 CREATE TABLE EMPLOYEE ( 2 id INT NOT NULL auto_increment, 3 first_name VARCHAR(20) default NULL, 4 last_name VARCH

MyBatis知多少(14)分散的数据库系统

任何一个重要的数据库无疑都会拥有不止一个依赖者.即使该数据库只是简单地被两个Web 应用程序所共享,也有许多事情需要考虑.假设有一个名为网上购物车的Web应用程序,它使用了一个包含类别代码的数据库.就网上购物车来说,类别代码是静态的,永远不会变化,所以该应用程序高速缓存了这些代码以提高性能.现在再假设有一个名为网上管理器的Web应用程序,它是用于更新类别代码的.这个网上管理器 应用程序运行在一个不同的服务器上,是一个完全独立的程序.那么,设想一下,当网上管理器更新了一个类别代码时,网上购物车如何

MyBatis知多少(10)应用程序数据库

应用程序数据库往往是最小.最简单.也最易于使用的数据库.这种数据库往往是我们这些开发人员通常不介意使用甚至非常乐意使用的.应用程序数据库通常与我们的应用程序处于同一个项目中,两者一齐设计和实现.正是因为这个原因,应用程序数据库的设计往往存在非常大的自由度,它也最有可能与我们的特定应用程序完美匹配.应用程序数据库的对外影响是最小的, 因为它通常只有一两个对外接口.第一个接口连接到我们的应用程序,而第二个接口可能就是一个简单的报表框架或报表工具.下图从较高的层次展示了一个应用程序数据库以及它与其他系