• SnackMachine和Snack是两个聚合

    在当前的领域模型中,有两个聚合根——Snack和SnackMachine
    image.png
    聚合这种设计模式通过聚合多个实体来简化领域模型,这种概念有几个含义:第一,聚合代表概念性的整体,代表多个领域模型黏合在一起。聚合有其固有属性,例如SnackMachine中Snack的重量被限制在10磅。每一个聚合都有一个根,它能领域的聚合,外界只能通过引用聚合根进行交互,聚合内的实体是不能被其它聚合直接持久地引用。在我们地例子中Snack Machine 聚合的聚合根是SnackMachine类,聚合外部的实体是不能直接引用Slot实体的。客户端需要获取Slot信息时,必须先获取SnackMachine实例且必须通过SnackMachine聚合根访问Slot。维持聚合根的不可变是至关重要的。
    image.png
    聚合也扮演着独立操作单元的角色,应用服务层通过从数据库获取聚合来进行对应的操作,从服务层来讲,聚合是一个整体的概念,其内部结构是无关紧要,也无需关心的。聚合定义固有的边界的同时,我们需要将之持久化。
    image.png
    仅仅多SnackMachine类持久化是不够的,其内部实体如Slot也是需要持久化的。持久化应该包含聚合整体。

    • 实体只能属于单个聚合
    • 值对象可以属于多个聚合

    值对象属于多个聚合不难理解,将值对象看作是整形便是。