假设我有一个ShippingOrder
实体,其中包括RouteSpecification
值对象。
为了验证RouteSpecification
,我需要对计算距离的服务进行简单调用-之所以需要这样做,是因为如果该路径不满足最小距离要求,则认为该路径无效。
我应该在RouteSpecification
内构造RouteSpecificationDomainService
还是在构建模型之前将其简单地用于验证?
如果是前者,则此域服务应将构建路由规范所需的组件(起源和目的地)作为参数,或者应抽象为另一个表示UnvalidatedRouteSpecification
并返回[C0 ]?
如果是后者,那么我只需要相信消费者已正确使用它,或者还有进一步的抽象来防止滥用?
如果ValidatedRouteSpecification
是一个值对象,则否,它不应具有自己的域服务。仅根聚集体可以。
但是,RouteSpecification
可以具有采用ShippingOrderService
和GenerateRoute
并返回有效路径的origin
方法。
由于路由的计算很重要,因此值对象仅应具有一个构造函数,该构造函数将使其处于有效状态需要采取一切措施。这样,将不可能为destination
实体分配无效的路由。
此处的idomatic DDD答案将使用ShippingOrder
。
DDD中的工厂负责构造有效的聚合(已初始化所有包含实体和值对象的聚合)。工厂是一个组件,可以使用任何必需的依赖项(甚至与外部系统依赖)来确保这种行为。
由于装运单是您的总和,因此应为Factory
提供所有参数和依赖项以构造对象即使最终对象中未使用它们,]] >>