如果User模型是聚合根本身,CreatedBy是否只包含用户ID?

时间:2016-03-05 10:36:27

标签: c# domain-driven-design

我刚刚开始了一个项目,以了解有关DDD的更多信息。 这可能是一个愚蠢的问题,但只是想了解有关DDD的更多信息。

例如,如果我在这里有2个域模型,产品和用户,都是聚合根。在Product中,我有其他状态/属性和2个状态称为“CreatedBy”和“CreatedDate”,让我们说域专家告诉我“CreatedBy和Date”都是业务域的一部分。 createdby必须与User模型相关。我在考虑3种选择,不确定它们中哪一种是正确的。

  1. CreatedBy只包含User的ID。 (public int CreatedBy ...
  2. CreatedBy是一个User对象。 (public User CreatedBy ...
  3. 创建一个值对象调用MetaData,如下所示

    class MetaData 
    { 
         public int CreatedBy ...
         public string CreatorName ...
         public string CreatorStatus ...
         public DateTime CreatedDate ...
    }
    
  4. 创建/保存产品时

    • 对于选项1,我只需要获取当前用户的UserID并进行设置 到我的产品型号
    • 对于选项2,我将获得当前用户的UserID并呼叫用户 存储库以获取此用户并设置为我的产品模型
    • 对于选项3,我将获得当前用户的UserID,构建
      MetaData对象并设置为我的产品模型。

    我不确定哪种方法是正确的,希望我对DDD的理解是正确的,直到现在......

1 个答案:

答案 0 :(得分:1)

ProductUser具有域关系即:"产品(始终?)由用户创建" 。通过将产品引用为User,最简单的方法是使Product具有UserId,可以实现

聚合不应该重叠,它们是自治的,这就是为什么您只使用UserId而不是整个用户的原因。如果你需要组合不同的聚合,那么这就是一个潜伏的第三个,但你还没有看到它。