1.事务脚本1)调用数据库:事务脚本将所有逻辑组合成一个进程,在进程中直接调用数据库,或者只通过一个简单的数据库封装器。2)脚本处理:每个交易都有自己的交易脚本,虽然交易之间的公共子任务可以分解成多个子程序。3)运行机制:a.事务脚本应该放在一个独立于其他处理表示层和数据源层的类中。有两种方法可以将交易脚本组织到类中:将几个交易脚本放在一个班级中,每个班级围绕一个主题组织相关的交易脚本;b.使用Command模式,每个交易脚本对应一个类(命令)4)什么时候使用:简单的业务逻辑场景(同时注意仔细提取公共下标程序,减少代码冗余),业务复杂时,需要建立领域模型5)优点:当问题本身比较简单时,使用事务脚本可以加快开发速度,运行速度更快6)例子:如果有如下需求:数据库设计为:其中,RevenueRecognitiontable将Contract表的Id引用为外键。根据需求和数据库设计,事务脚本类图设计如下:这里Gateway是数据库访问sealer,RecognitionServices是事务脚本类。CalculateRevenueRecognitions方法用于计算并保存需要记录的信息(合同号、时间、收费金额),RecognizedRevenue用于查询按合同号和指定日期收取的费用。应用程序只需要分别调用这两个方法即可。2、领域模型1)运行机制领域模型与数据库模型的区别:领域模型混合了数据和处理过程,具有多值属性和复杂的关联网络,使用继承、策略和设计模式。复杂的颗粒状物体网络;领域逻辑的一个常见问题:领域对象过于臃肿,这会导致数据库映射的代码冗余:简单的领域模型可以使用活动记录,而复杂的领域模型需要使用数据映射器。领域模型应该使用具有细粒度接口的细粒度对象。2)当业务规则复杂多变,涉及验证、计算、推导时,何时使用。数据库交互方式:datamapper优先3)实例:针对以上需求,设计类图如下: 可以看到,这里的收费方式使用了策略模式。3.表模块表模块使用一个对应于数据库中的表的类来组织领域逻辑,并使用单个类实例来包含对数据执行的各种操作过程。表模块和领域逻辑的区别:如果有多个订单,领域模型对每个订单都有一个对象,而表模块只用一个对象来处理所有的订单(表模块没有标识符来识别它代表什么实体对象)。1)运行机制的优点:可以让你把数据和行为封装在一起,同时具有充分利用关系数据库的优点2)什么时候使用记录集访问表数据时(表模块严重依赖on 3)实例:设计类图如下: 4.服务层服务层定义了应用程序的边界以及从接口客户端层的角度可以看到的可用操作集。它在其操作实现中封装了应用程序的业务逻辑、事务控制和响应协调。 1)运行机制业务逻辑分类:领域逻辑和应用逻辑两种基本实现方式:领域表象法:服务层实现为领域模型(负责实现表象的类不包含任何业务逻辑,所有业务逻辑由领域模型实现)操作脚本方式:服务层由一组相对复杂的类组成,这些类直接实现应用逻辑,但是当将领域逻辑委托给封装了领域对象类服务层接口粒度化,需要时可以远程调用(在服务层之上加一个远程外观或者直接让服务层实现一个远程接口) 2)服务层的优点当used:定义了一组通用的应用操作,可供各种客户端使用,服务层坐标应用程序在每个操作中的响应。当业务逻辑有多个客户端,或用例响应中有多个事务资源时,需要服务层
