DDD领域驱动设计-充血贫血模型

面向对象操作:将数据拿出来后去做数据对象然后再用工具类去使用

面向对象操作:

C#
cart.clear()
//等同于面向过程:
Cart.clear(cart)

导致了领域设计的充血和贫血的争议出现

贫血模式
  • 贫血模型是指领域对象里只有get和set方法(POJO),所有业务逻辑都不包含在内而是放在Business Logic层
  • “行为”(逻辑、过程)和”状态”(数据,对应到语言就是对象成员变量)分离到不同的对象
  • 我们常见的N层结构中的Logic/Service/Manager层
  • Manager层的由来
    • Service层容易代码臃肿,很容易出现大事务,事务嵌套,导致问题很多,而且极难排查
    • 增加了Manager层,它与Service层的关系是:Manager层提供原子的服务接口,Service层负责依据业务逻辑来编排原子接口
充血模式
  • 数据和对应的业务逻辑被封装到同一个类中。因此,这充血模型满足面向对象的封装特性,是典型的面向对象编程风格。
  • 传统的设计一般是:
    • 类:Cart+CartManager;
    • 保存用户调用:cartManager.clear(Cart cart)
  • 充血的设计则可能会是:
    • 类:Cart;
    • 保存用户调用:cart.clear();
订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论
滚动至顶部