首页/开发/代码质量与评审速查/贫血模型与充血模型(Anemic vs Rich Domain)
设计原则与模式62 条

贫血模型与充血模型(Anemic vs Rich Domain)

贫血模型把数据与行为分离,业务逻辑集中在服务层;充血模型让领域对象自带行为,服务只做编排。选择取决于团队共识与复杂度:简单 CRUD 贫血够用,复杂规则充血更稳。

对比

维度贫血模型充血模型
逻辑位置Service 层领域对象内
上手成本低(结构直白)中(需要领域建模)
规则集中易散落重复封装在对象内
适合CRUD、简单流程规则密集的领域

充血示例

充血示例
class Order {
    void cancel() {
        if (status == SHIPPED) throw new IllegalStateException();
        status = CANCELLED;
    }
}

易错点

  • 盲目充血:把 I/O 与事务也塞进实体,污染领域层
  • 贫血到底:同一规则在多个 Service 复制

数据来源与参考

  • Martin Fowler · AnemicDomainModel 模式条目;Eric Evans《领域驱动设计》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌