• 对外封闭的聚合
    • 暴露SnackPile值对象而不是Slot
    • 善于重构新的抽象

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

    1. public SnackPile subtractOne() {
    2. return new SnackPile(snack, getQuantity() - 1, getPrice());
    3. }