Domain driven design DDD、总量和实体

Domain driven design DDD、总量和实体,domain-driven-design,ddd-repositories,Domain Driven Design,Ddd Repositories,我有以下域对象结构 Invoice - List<Items> - Service 若我理解正确,在这个场景中,发票是聚合的,项目是实体,服务是项目的价值对象 若我需要向数据库添加新服务,会发生什么。我是否应该创建一个新的服务类,然后为该场景聚合,并拥有自己的存储库?服务是否可以独立存在看起来他们可以根据你上面所说的 如果需要向数据库添加新服务(我假设服务是独立的),则需要创建服务聚合根。还将有一个服务存储库等用于添加它 聚合根和存储库始终是一对一的。他们的关键是了解

我有以下域对象结构

Invoice
 - List<Items>
      - Service
若我理解正确,在这个场景中,发票是聚合的,项目是实体,服务是项目的价值对象


若我需要向数据库添加新服务,会发生什么。我是否应该创建一个新的
服务
类,然后为该场景聚合,并拥有自己的存储库?

服务是否可以独立存在看起来他们可以根据你上面所说的

如果需要向数据库添加新服务(我假设服务是独立的),则需要创建服务聚合根。还将有一个服务存储库等用于添加它

聚合根和存储库始终是一对一的。他们的关键是了解你所在领域的聚合根是什么。一旦您正确地定义了这些,存储库将是自定义的


请注意,如果您在上面的示例中需要向发票中添加类似于新项目的内容,则必须通过发票存储库执行此操作。原因很简单,因为项是一个实体,而不是聚合根。

服务可以独立存在吗?-看起来他们可以根据你上面所说的

Invoice
 - List<Items>
      - Service
如果需要向数据库添加新服务(我假设服务是独立的),则需要创建服务聚合根。还将有一个服务存储库等用于添加它

聚合根和存储库始终是一对一的。他们的关键是了解你所在领域的聚合根是什么。一旦您正确地定义了这些,存储库将是自定义的

请注意,如果您在上面的示例中需要向发票中添加类似于新项目的内容,则必须通过发票存储库执行此操作。原因很简单,因为Item是一个实体,而不是聚合根。

Invoice
Invoice
 - List<Items>
      - Service
-名单 -服务
首先要注意的是,这是对结构的描述。DDD中聚合的动机不是结构,而是行为。聚合的作用是确保对结构所做的修改符合业务规则

若我理解正确,在这个场景中,发票是聚合的,项目是实体,服务是项目的价值对象

很接近,但是术语有点模糊(对不起)。如果此结构表示聚合边界内的状态,则
发票
将是充当
聚合根的实体,聚合本身通常称为
发票聚合

项和服务可能是值类型,也可能是实体。你需要更多的信息才能确定。从名称(应该取自普遍存在的语言)猜测,它们可能都是实体
ServiceName
ServiceId
更可能是值类型

重要的一点是:如果这些是实体,则它们的生命周期从属于
发票的生命周期。换句话说,发票的“级联删除”将包含项目和服务

若我需要向数据库添加新服务,会发生什么。我是否应该创建一个新的服务类,然后为该场景聚合,并拥有自己的存储库

稍微向后:持久性组件支持域模型,而不是相反

如果服务是一个实体,并且该实体的生命周期独立于任何一个发票(例如,如果两个不同的发票可以引用“相同”的服务),则该服务实体应处于与发票不同的聚合中,并且发票的状态包含对该服务的引用,而不是服务本身

如果这是正确的模型,那么服务聚合将拥有自己的存储库。

Invoice
-名单
-服务
首先要注意的是,这是对结构的描述。DDD中聚合的动机不是结构,而是行为。聚合的作用是确保对结构所做的修改符合业务规则

若我理解正确,在这个场景中,发票是聚合的,项目是实体,服务是项目的价值对象

很接近,但是术语有点模糊(对不起)。如果此结构表示聚合边界内的状态,则
发票
将是充当
聚合根的实体,聚合本身通常称为
发票聚合

项和服务可能是值类型,也可能是实体。你需要更多的信息才能确定。从名称(应该取自普遍存在的语言)猜测,它们可能都是实体
ServiceName
ServiceId
更可能是值类型

重要的一点是:如果这些是实体,则它们的生命周期从属于
发票的生命周期。换句话说,发票的“级联删除”将包含项目和服务

若我需要向数据库添加新服务,会发生什么。我是否应该创建一个新的服务类,然后为该场景聚合,并拥有自己的存储库

稍微向后:持久性组件支持域模型,而不是相反

如果服务是一个实体,并且该实体的生命周期独立于任何一个发票(例如,如果两个不同的发票可以引用“相同”的服务),则该服务实体应处于与发票不同的聚合中,并且发票的状态包含对该服务的引用,而不是服务本身


如果这是正确的模型,那么服务聚合将有自己的存储库。

这样服务就可以与mult共享