结合领域驱动设计的SOA分布式软件架构,你还在为这些烦恼?( 四 )
< 1000)_order.Favorable = _order.Price * 0.1;if (point >= 1000if (point > 2000)_order.Favorable = _order.Price * 0.3;}//如果价格在98元以上 , 可免运费 。 其余运费为10元private void FreightageAccount(double price){if (price >= 98)_order.Freightage = 0;else_order.Freightage = 10;}}}你可能会说 , 在这个业务流程中 , 除了积分优惠Person.Point以外 , 其他的业务都只与Order的属性有关 , 按照充血型模型的方案 , 完全可以把这些业务放到Order的方法当中 , 而把积分优惠独立成为一个服务 。 但在下在很多的开发过程中发现 , 为模型附上动作会带来一连串的问题 , 好像你不知道哪些操作应该在模型动作上实现 , 哪里应该在服务中实现...... 。 对于这些无休止的争论不会因为这里的一个小例子而停止 , 但在这里我会坚持使用贫血型模型,利用服务来完成所有的动作 。
再举一个例子:在最后结单的时候Order表里会产生订单号码OrderNumber和下订日期Delivery , Person表的积分也会加上订单总价的点数 。 对应这个操作 , 也可以单独开发一个PaymentManager服务类进行管理 。
namespace Business.Service.DomainService{public class PaymentManager{//下单结算public void Payment(Order order,Person person){//确定下单 , 建立订单号order.OrderNumber = Guid.NewGuid().ToString();order.Delivery = DateTime.Now;//增加积分if (person.Point.HasValue)person.Point += (int)order.TotalPrice.GetValueOrDefault();elseperson.Point = (int)order.TotalPrice.GetValueOrDefault();}}}
利用领域层的服务 , 使得每个Manager服务类的职能非常明确 , 业务管理起来也十分地方便 , 领域层可以随着业务的改变而灵活变动 。 而且领域层具有 “高内聚 , 低耦合” 特性 , 它并不依赖其它任何一层 , 而只是把业务逻辑包含在里面 。
六、工厂模式FactoryFactory是常用到软件开发模式 , 在网上像简单工厂、工厂方法、抽象工厂等开发模式的资料都到处可寻 , 可这并不是领域驱动设计的主题 。 在这一节里 , 我主要想介绍Factory的使用时机 。
并非生成所有对象的时候 , 都需要用到工厂模式 。 在生成简单对象的时候 , 可以直接利用构造函数来代替工厂 , 也可以添加工厂方法来生成对象 。 但如果在生成对象时 , 内部属性之间存在一系统复杂的业务规则的时候 , 就可以把生成方法独立到一个Factory类里面 。 这时候客户端无需理会潜在逻辑关系 , 而直接通过这个Factory来生成相应的对象 。
举个例子 , 在新建Order的时候 , 业务上规定运费是总体金额的1% , 折扣规定是7.5折......。 如果由客户端新建一个对象Order , 然后为这些属性负值 , 那相关的业务逻辑就会暴露在外 。 这时候就可以使用Factory模式 , 把属性之间的关系封装到Factory之内 , 客户端通过Factory就能轻松地生成Order对象而无需要理会复杂的内部关系 。
文章插图
至于较复杂的Factory模式 , 在此不多作介绍 , 各位可以在网上查找相关资料 。
七、细说应用层1. SOA系统中应用层的特点
在开发SOA分布式系统的时候 , 应用层是一个重点 , 它主要有两个作用 。
第一 , 应用层主要作用是协调领域层工作 , 指挥领域对象解决业务问题 , 但应用层本身不会牵扯到业务状态 。
第二 , 在SOA系统当中应用层是数据运输中心和信息发放的端口 , 担负着数据转换与数据收发的责任 。
它有以下的特点:
- 粗粒度
- 走向|电商,从货架陈列走向内容驱动
- 率先|还在相片美颜?OPPO已进军视频美妆领域,周冬雨或率先体验
- 制药领域|为什么AI制药这么火,为什么是现在?
- 科技|联咏科技将从明年下半年开始为iPad提供LCD驱动芯片
- 鼓励|(经济)商务部:鼓励引导商务领域减少使用塑料袋等一次性塑料制品
- 博会|第17届东博会:设置5400个实体展位 多领域成果丰硕
- OLED驱动芯片|华为三喜临门,OLED芯片自研成功,鸿蒙OS本月测试
- 驱动|开源之系统:Ubuntu20.04电脑安装无线网卡驱动并解决包依赖关系
- 优选|美团财报电话会议实录:王兴称美团优选是优先战略领域
- 搭档|台湾、东北小伙搭档 打造用工领域“滴滴打车”