DDD碎片记录 05. 充血模型的优点
充血模型的概念
将领域模型的原貌直接转换为程序中领域对象的设计,这时,各种业务操作就不再在服务中实现了,而是在领域对象中实现,如【订单充血模型设计图】所示,在程序设计时,既有父类的订单,又有子类实物订单,虚拟订单。并且,在领域对象中的方法,也同样保留到了程序设计的实体对象中,这样通过继承,虽然实物订单,虚拟订单都有订单履约,但实物订单的履约与虚拟订单的履约是不一样的。虽然在充血模型中也有订单service,里面也有订单履约方法,但是充血模型的service只干一件特别简单的事,那就是在接收到用户的请求后,就直接去调用实体对象中的相应方法,其他的什么都不干。这样订单service不需要去关注现在调用的是实物订单的订单履约方法,还是虚拟订单的订单履约方法,只需要订单履约就行了。如果当前拿到的是实物订单就执行实物订单的订单履约方法,如果拿到的是虚拟订单就执行虚拟订单的订单履约方法。当需求增加一个服务订单时,就只需要增加一个服务订单的子类,重载会员订单履约方法,而订单service不需要做任何修改,变更的维护成本就大大降低了。
充血模型设计的好处
- 保存了领域模型的原貌,直接转换成程序设计,当领域模型在随业务做大幅度调整时,可以直接映射成程序的变更。代码修改起来比较直接。
- 充血模型保持了对象的封装性,是的领域模型在面临多态,继承等复杂结构时,易于变更。
共有 0 条评论