代码之家  ›  专栏  ›  技术社区  ›  Leonz

如果用户模型本身是聚合根,CreatedBy是否应该只包含用户id?

  •  0
  • Leonz  · 技术社区  · 9 年前

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

    例如,如果我有两个域模型,产品和用户, 两者都是聚合根 。在Product中,我有其他状态/属性和两个状态,分别称为“CreatedBy”和“CreatedDate”,假设领域专家告诉我 “CreatedBy和Date”都是业务域的一部分 。创建者必须与用户模型相关。我在考虑3个选项,不确定哪一个是正确的。

    1. CreatedBy仅包含用户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 ...
      }
      

    当创建/保存产品时,

    • 对于选项1,我只需要获取当前用户的UserID并设置 到我的产品模型
    • 对于选项2,我将获取当前用户的UserID并调用user 获取此用户并设置为我的产品模型的存储库
    • 对于选项3,我将获取当前用户的UserID,构造
      MetaData对象并设置为我的产品模型。

    我不确定哪种方法是正确的,希望我对DDD的理解是正确的。。。

    1 回复  |  直到 9 年前
        1
  •  1
  •   MikeSW    9 年前

    Product User 有一个 域关系 即:“产品是(总是?)由用户创建”。这可以是 已实施 通过将Product引用为User,最简单的方法是让Product具有UserId。

    聚合不应该重叠,它们是自主的,这就是为什么您只使用UserId而不是整个User。如果你需要组合不同的集合,那么这暗示着第三个集合潜伏着,但你还看不到。