对比
| 维度 | 贫血模型 | 充血模型 |
|---|---|---|
| 逻辑位置 | Service 层 | 领域对象内 |
| 上手成本 | 低(结构直白) | 中(需要领域建模) |
| 规则集中 | 易散落重复 | 封装在对象内 |
| 适合 | CRUD、简单流程 | 规则密集的领域 |
充血示例
充血示例
class Order {
void cancel() {
if (status == SHIPPED) throw new IllegalStateException();
status = CANCELLED;
}
}贫血模型把数据与行为分离,业务逻辑集中在服务层;充血模型让领域对象自带行为,服务只做编排。选择取决于团队共识与复杂度:简单 CRUD 贫血够用,复杂规则充血更稳。
| 维度 | 贫血模型 | 充血模型 |
|---|---|---|
| 逻辑位置 | Service 层 | 领域对象内 |
| 上手成本 | 低(结构直白) | 中(需要领域建模) |
| 规则集中 | 易散落重复 | 封装在对象内 |
| 适合 | CRUD、简单流程 | 规则密集的领域 |
class Order {
void cancel() {
if (status == SHIPPED) throw new IllegalStateException();
status = CANCELLED;
}
}