1、失血模型
失血模型中,domain object只有属性的get set方法的纯数据类,所有的业务逻辑完全由Service层来完成的,由于没有dao,Service直接操作数据库,进行数据持久化。
service: 肿胀的服务逻辑
model:只包含get set方法
显然失血模型service层负担太重,一般不会有这种设计。
2、贫血模型
贫血模型中,domain ojbect包含了不依赖于持久化的原子领域逻辑,而组合逻辑在Service层。
service :组合服务,也叫事务服务
model:除包含get set方法,还包含原子服务(如获得关联model的id)
dao:数据持久化
贫血模型比较常见,其问题在于原子服务往往不能直接拿到关联model,因此可以把这个原子服务变成直接用关联modelRepo拿到关联model,这就是贫血模型。
3、充血模型
充血模型中,绝大多业务逻辑都应该被放在domain object里面,包括持久化逻辑,而Service层是很薄的一层,仅仅封装事务和少量逻辑,不和DAO层打交道。
service :组合服务 也叫事务服务
model:除包含get set方法,还包含原子服务和数据持久化的逻辑
充血模型的问题也很明显,当model中包含了数据持久化的逻辑,实例化的时候可能会有很大麻烦,拿到了太多不一定需要的关联model。
4、胀血模型
胀血模型取消了Service层,只剩下domain object和DAO两层,在domain object的domain logic上面封装事务。
一般来说失血模型和胀血模型不常见,多采用贫血模型。
贫血模型和充血模型的差别在于,领域模型是否要依赖持久层,贫血模型是不依赖的,而充血模型是依赖的。
血模型概述
失血模型模型仅仅包含数据的定义和get
DDD模型解析:失血、贫血、充血与胀血

本文介绍了四种DDD模型:失血模型将业务逻辑置于Service层,模型仅含数据;贫血模型中领域对象包含部分业务逻辑,Service层处理组合逻辑;充血模型的领域对象包含大部分业务逻辑,Service层较轻;胀血模型则取消Service层,领域对象直接处理事务。通常,贫血模型更为常见。
最低0.47元/天 解锁文章
1248

被折叠的 条评论
为什么被折叠?



