Domain driven design DDD-应如何处理查找实体?

Domain driven design DDD-应如何处理查找实体?,domain-driven-design,aggregate,aggregateroot,Domain Driven Design,Aggregate,Aggregateroot,我们正在进行一个使用DDD的项目,但却被困在如何处理查找实体上。 例如,我们有一个名为“Customer”的聚合,实体“Customer”也是聚合根。实体“Customer”具有属性“CustomerTypeID” 但是我们还有一个实体“CustomerType”,它代表所有现有的客户类型(ID和描述)。将有一个管理功能,允许用户维护客户类型(即添加新的客户类型等) 请注意,我说的不是更改特定客户的客户类型,而是维护客户类型列表 我为这个冗长的故事道歉,但以下是我的问题: 我认为“Custom

我们正在进行一个使用DDD的项目,但却被困在如何处理查找实体上。 例如,我们有一个名为“Customer”的聚合,实体“Customer”也是聚合根。实体“Customer”具有属性“CustomerTypeID”

但是我们还有一个实体“CustomerType”,它代表所有现有的客户类型(ID和描述)。将有一个管理功能,允许用户维护客户类型(即添加新的客户类型等)

请注意,我说的不是更改特定客户的客户类型,而是维护客户类型列表

我为这个冗长的故事道歉,但以下是我的问题:

  • 我认为“CustomerType”是一个实体而不是一个值对象,对吗

  • “CustomerType”应该在聚合“Customer”中,还是应该在它自己的聚合中,因为我们将在特定客户的上下文之外访问和维护它

  • 如果这个实体和任何其他作为基本查找实体(如客户状态、产品类型等)的实体应该单独聚合(并且是这些聚合的聚合根),那么我最终不会拥有数百个存储库吗?(因为每个聚合根都有自己的存储库)

正如你所看到的,我在这里陷入了混乱,只需要指出正确的方向

=================================== 我试图写一些代码来回复eulerfx的回复,但我无法让它工作,所以我将把它放在这里

关于第2点,在屏幕上,我们显然只会显示类型的描述(例如“个人”)。那是不是意味着我会有这样的结局

Public Class Customer
    Inherits EntityBase(Of Integer)
    Implements IAggregateRoot

    Public Property CustomerID As Integer
    ...
    Public Property CustomerType As CustomerType
    ...

公共类CustomerType 继承EntityBase(整数的) 实现IAggregateRoot

    Public Property CustomerTypeID As Integer
    Public Property CustomerTypeDescription As String
或者类“Customer”中的属性应该是CustomerTypeID吗

关于第3点,聚合和有界上下文之间有什么区别?“Customer”聚合(其中“Customer”是聚合根)是否也包含仅存在于Customer上下文中的任何实体和值对象,而不是一个有界上下文

  • 是的,因为
    CustomerType
    具有标识和相关描述,所以它是一个实体

  • Customer
    类是否具有
    CustomerType
    属性或
    CustomerTypeId
    属性取决于它是否需要访问
    CustomerType
    上的其他属性。无论哪种方式,
    CustomerType
    都是拥有自己存储库的自己的实体

  • 如果您有数百个实体,特别是您指定的类型,那么这可能表明项目变得太大,您可能需要将其划分为适当的有界上下文


  • 我正试图在注释中添加一些代码,但由于这是我的第一篇文章,我仍在努力,所以我在原始查询的底部添加了一个部分。请查看>,或者类“Customer”中的属性应该是CustomerTypeID吗?这取决于客户实体是否需要访问客户类型的描述。>聚合上下文和有界上下文之间的区别是什么?