0

我开始与域驱动开发和大量阅读后,我试图重构应用程序的DDD方式。但我面临着一个根本性问题,不知道如何解决。作为实体或值对象的DDD查找

作为介绍我的应用程序应该做的一些简化任务。这是一个课程预定申请:

  • 一门课程包括类别,日期,描述和位置
  • 类别和位置可以从Dropdownbox
  • 一个特殊的设置部分可以选择给用户的possibillity添加和 更改类别和位置

我对一个对象的不可变状态有点困惑。首先,我认为一个例子必须是一个实体对象,因为它有一个身份。但在范围当然地点本身是不可改变的,不能改变。

我真的很困惑。任何人都可以帮我清除我的观点吗?

回答

0

如果位置可以独立于课程进行管理(添加,编辑,删除等),则位置很可能是独立的聚合根。你会改变你的课程引用它的位置的ID,而不是包含一个位置。

我会这样做,因为位置是有限的,你可能想看看他们的建模作为实体(即他们是你想要存储和ids反对,而不是像学生的家庭地址,它们很可能总是价值对象,因为它们没有可变性或可重用性),位置作为聚合根,每个位置都有一个地址属性,这将是一个值对象(如果您使用的是SQL,那么地址可以被非规格化并且与位置数据一起被存储在行中)。

如果您不希望开发人员能够修改任何位置的任何属性,那么您可以设计您的类以防止修改。

0

的decicision是基于你如何识别它们。(不imutability)

位置是usally的实体。但是在某些情况下,如果您只关心标识符,则值对象也很好。

@Entity 
Location { 
    @Identifier private String code; 

    //many other mutable properties 
} 

@ValueObject 
Location { 
    private String code;//the only property 
} 

DDD不擅长产品信息或其他内容管理导向的事情。我宁愿保留原始结构,但找到一个小的子域来重构库存或定价。