何时将副作用隔离到域服务中的DDD

问题描述 投票:0回答:2

假设我有一个ShippingOrder实体,其中包括RouteSpecification值对象。

为了验证RouteSpecification,我需要对计算距离的服务进行简单调用-之所以需要这样做,是因为如果该路径不满足最小距离要求,则认为该路径无效。

我应该在RouteSpecification内构造RouteSpecificationDomainService还是在构建模型之前将其简单地用于验证?

如果是前者,则此域服务应将构建路由规范所需的组件(起源和目的地)作为参数,或者应抽象为另一个表示UnvalidatedRouteSpecification并返回[C0 ]?

如果是后者,那么我只需要相信消费者已正确使用它,或者还有进一步的抽象来防止滥用?

domain-driven-design
2个回答
0
投票

如果ValidatedRouteSpecification是一个值对象,则否,它不应具有自己的域服务。仅根聚集体可以。

但是,RouteSpecification可以具有采用ShippingOrderServiceGenerateRoute并返回有效路径的origin方法。

由于路由的计算很重要,因此值对象仅应具有一个构造函数,该构造函数将使其处于有效状态需要采取一切措施。这样,将不可能为destination实体分配无效的路由。


0
投票

此处的idomatic DDD答案将使用ShippingOrder

DDD中的工厂负责构造有效的聚合(已初始化所有包含实体和值对象的聚合)。工厂是一个组件,可以使用任何必需的依赖项(甚至与外部系统依赖)来确保这种行为。

由于装运单是您的总和,因此应为Factory提供所有参数和依赖项以构造对象即使最终对象中未使用它们,]] >>

© www.soinside.com 2019 - 2024. All rights reserved.