Architecture 加载域实体';DDD中的s子集合

Architecture 加载域实体';DDD中的s子集合,architecture,entity,domain-driven-design,ddd-repositories,Architecture,Entity,Domain Driven Design,Ddd Repositories,我有一个聚合,它由一个名为Master的根实体和一个名为Detail的叶组成。因此,主实体有一个详细实体的集合。我不向客户机公开细节集合,因为我不想让客户机直接向其中添加细节项。相反,我的主实体上有一个AddDetail方法,该方法在添加新的详细信息项时立即验证域不变量,并允许我们在该位置应用域规则。详细信息作为只读IEnumerable属性公开。 当我想在MasterRepository中加载详细信息项时,问题就出现了。由于无法将任何项添加到详细信息集合,因此我不知道如何加载作为主实体状态一部

我有一个聚合,它由一个名为Master的根实体和一个名为Detail的叶组成。因此,主实体有一个详细实体的集合。我不向客户机公开细节集合,因为我不想让客户机直接向其中添加细节项。相反,我的主实体上有一个AddDetail方法,该方法在添加新的详细信息项时立即验证域不变量,并允许我们在该位置应用域规则。详细信息作为只读IEnumerable属性公开。
当我想在MasterRepository中加载详细信息项时,问题就出现了。由于无法将任何项添加到详细信息集合,因此我不知道如何加载作为主实体状态一部分的详细信息。另一方面,我认为在加载主实体的状态时使用AddDetail方法不是一个好的做法,因为在那时规则已经应用,在加载实体的状态时验证它们将是一个冗余的重载。另外,添加一个新的细节,会触发一些我不希望在加载实体时发生的域事件。

您没有说您正在使用哪种语言,但ORM框架通常通过反射直接访问主机的内部字段


如果您使用自己的或使用没有反射的语言,您可以添加一个内部实用程序类(例如,在同一个包中),该类具有对字段的包/朋友访问权限,并且可由存储库直接访问字段。

您没有说您使用的是哪种语言,但是ORM框架通常通过反射直接访问主服务器的内部字段


如果您使用自己的或使用没有反射的语言,您可以添加一个内部实用程序类(例如,在同一个包中),该类具有对字段的包/朋友访问权限,并且可由存储库直接访问字段。

您没有说您使用的是哪种语言,但是ORM框架通常通过反射直接访问主服务器的内部字段


如果您使用自己的或使用没有反射的语言,您可以添加一个内部实用程序类(例如,在同一个包中),该类具有对字段的包/朋友访问权限,并且可由存储库直接访问字段。

您没有说您使用的是哪种语言,但是ORM框架通常通过反射直接访问主服务器的内部字段

如果您使用自己的或使用没有反射的语言,您可以添加一个内部实用程序类(例如,在同一个包中),该类对字段具有包/朋友访问权限,并且存储库可以使用该类直接访问字段

我认为在加载主实体的状态时使用AddDetail方法不是一个好的实践

您是对的,使用
AddDetail
方法不是一个好主意

我不知道如何加载作为主实体状态一部分的详细信息

如何加载
主实体的其他属性?
实体

我在回答另一个问题()时提到了很多可用选项:

  • ORM可以映射私有字段(例如NHibernate、EntityFramework)
  • 反射可用于访问私有字段
  • 集合可以通过用于构造实体的公共构造函数传递。我会避免在集合中使用公共setter
  • 第三部分框架有时很有用(例如AutoMapper)
  • 由于
    详细信息
    实体的集合只是
    主属性
    的属性,因此我将使用用于加载其他属性的方法。

    我认为在加载主实体的状态时使用AddDetail方法不是一个好的实践

    您是对的,使用
    AddDetail
    方法不是一个好主意

    我不知道如何加载作为主实体状态一部分的详细信息

    如何加载
    主实体的其他属性?
    实体

    我在回答另一个问题()时提到了很多可用选项:

  • ORM可以映射私有字段(例如NHibernate、EntityFramework)
  • 反射可用于访问私有字段
  • 集合可以通过用于构造实体的公共构造函数传递。我会避免在集合中使用公共setter
  • 第三部分框架有时很有用(例如AutoMapper)
  • 由于
    详细信息
    实体的集合只是
    主属性
    的属性,因此我将使用用于加载其他属性的方法。

    我认为在加载主实体的状态时使用AddDetail方法不是一个好的实践

    您是对的,使用
    AddDetail
    方法不是一个好主意

    我不知道如何加载作为主实体状态一部分的详细信息

    如何加载
    主实体的其他属性?
    实体

    我在回答另一个问题()时提到了很多可用选项:

  • ORM可以映射私有字段(例如NHibernate、EntityFramework)
  • 反射可用于访问私有字段
  • 集合可以通过用于构造实体的公共构造函数传递。我会避免在集合中使用公共setter
  • 第三部分框架有时很有用(例如AutoMapper)
  • 由于
    详细信息
    实体的集合只是
    主属性
    的属性,因此我将使用用于加载其他属性的方法。

    我认为在加载主实体的状态时使用AddDetail方法不是一个好的实践

    使用
    AddDetail
    方法是正确的