- 对外封闭的聚合
- 暴露SnackPile值对象而不是Slot
- 善于重构新的抽象
聚合具有高度封装性,内部的实体都不能向外暴露。这是保持隔离性的良好实践方法。我们借助值对象SnackPile链接两个聚合。抽象帮助我们精简代码,降低复杂度。抽象值对象的轻量化性质非常适合放置领域逻辑。我们将Slot的大部分功能转移到SnackPile中,Slot这时就是一个包装类,拥有可变性,其内部值对象维持其不可变性。
public SnackPile subtractOne() {
return new SnackPile(snack, getQuantity() - 1, getPrice());
}