What is it
不少企业应用能够当作一系列的事务,每个事务能够经过使用一个Transaction Script来处理。算法
How it works
使用Transaction Script,咱们能够专一于处理好每个事务,而没必要考虑其余事务的影响,所做的就是获得输入,查询数据库,处理事务,保存结果。
Transaction Script能够有两种方法组织成类。一种是将同一领域的几个Transaction Script放在一个独立的类中;另外一种是采用Command模式,将每个Transaction Script组织成一个Command基类的子类;固然,也能够不要组织成类,而使用全局函数的方式,可是类的方式更易于隔离数据。数据库
When to use it
Transaction Script最大的优势和缺点,都是在于它的简单性。优势是代码的简单易懂,运行效率也不错;缺点是极可能出现代码重复,固然这个能够经过重构来减轻,更重要的是,随着企业事务复杂性的增长,Transaction Script就会变得力不从心。
Transaction Script下的开发有如下特征:对象类只包括数据,不包括任何事务相关的算法,每每就是数据库中表结构的类化;调用的Sql语句经常在Transaction Script核心函数中出现,固然这个是很差的设计,应该使用好比Table Data GateWay等模式,将Sql语句封装在wrapper中,来进行数据库交互,而核心函数直接访问wrapper的方法来进行事务处理数据结构
What is it
随着企业事务的复杂化,咱们应该采用Domain Model模式来开发应用。Domain Model是一种将数据与其行为集成在一块儿的模式app
How it work
使用Domain Model时,咱们须要在应用程序中加入一个完整的对象层,这些对象模仿业务系统中的对象及其逻辑规则,这和Transaction Script中对象仅仅是数据不包含业务逻辑造成最大的区别
一个Simple Domain Model看上去和数据库设计很是类似,每一个Domain Object对应一个数据表,可使用Active Record模式来和数据库交互;Rich Domain Model则否则,经过使用继承,策略等模式和相互关联的对象网,Rich Domain Model能够更好的处理更复杂的逻辑,同时也增长了和数据库间映射的难度,这时能够采用Data Mapper模式来应对。
基于业务逻辑的多变性,数据对象层也应该可以更灵活的创建,修改和测试,这样,咱们必须尽可能减小该层同其余层次间的耦合。数据库设计
When to use it
当你面对一个涉及验证,计算等等复杂多变行为的业务规则时,你须要考虑使用Domain Model。使用Domain Model时,数据库交互方面的第一选择是Data Mapper,它有助于使你的对象层同数据库独立。你也能够考虑使用Service Layer来给你的Domain Model暴露出更加清晰的API。
使用Domain Model很大的好处是,经过对象类的继承多态等性质,能够方便的扩展模型,以适应多变的企业逻辑,同时减轻重复代码的现象。函数
和Transaction Script的区别
Transaction Script : 从数据库读取数据 -〉 以读取的数据集做为参数,调用Transaction处理类
Domain Model : 从数据库读取数据 -〉 映射为数据对象类 -〉 调用对象类的成员函数来处理企业事务测试
What is it
Table Module是处理一个数据表或者数据视图全部行的业务逻辑的一个单独的实例。
通常的,Domain Model等传统面向对象模式都创建在对象/身份的基础之上,就是说好比一个员工类的实例就对应着一个特定的员工,这样咱们能够执行员工操做,获取员工信息等。这些模式的很差之处在于很难和关系数据库造成好的接口,致使咱们要做大量工做用于处理数据在业务层和数据库这两个表现彻底不一样的层次之间的传递。
Table Module则否则,它对于数据库中的每一个表创建一个类的实例,用来操做该表中的数据。.net
How it works
Table Module模式使得咱们能够打包数据和它们的行为,并同数据库保持很好的联系。它经常做为面向表的后台数据结构,而表状的数据通常的是Sql语句调用的RecordSet返回值。
Table Module便可以使类的单独实例,也能够是类的一组静态函数。采用实例的方式给咱们更大的好处,便于经过一个存在的RecordSet来初始化,也很容易的经过继承等方式进行扩展。
Table Module模式能够经过厂模式来实现请求,另外的方法是经过Table Data Gateway,很差的是引入了Table Data Gateway类和机制,好的方面是咱们能够只使用一个Table Module了,对于不一样的数据源,采用不一样的Table Data Gateway就能够了
Table Module使用方法是:首先经过Table Data Gateway把数据装成RecordSet,而后以其为参数建立Table Module,经过Table Module来处理业务逻辑,并把修改的结果传回数据库。中间的过程当中,RecordSet数据一直在内存中,而没必要返回数据库。
固然Table Module并不局限于表,表/视图/Sql查询结果等均可以应用此模式设计
When to use it
Table Module基于面向表的数据,并且它必定是把数据结构放在整个代码的中心。面对一个复杂的业务逻辑,它不能提供足够的实例-to-实例的能力,在处理多态上也存在不足,这时咱们仍是应该采用Domain Model,Domain Model+Active Record也能够处理表状的数据。
Table Module在COM应用中比较常见,这是由于微软的ADO库提供了一个很好的机制,使用RecordSet来处理数据库的数据。对象