[英]Should I get other Aggregate value from application service or entity?
我有库存,目录和销售限制上下文。
我有这个不变式:
创建目录时,我们所售商品不能超过库存商品
class CatalogApplicationService {
void createCatalog(ProductId productId, int numToSell) {
ProductValue pv = productService.byId(productId)
// Catalog constructor will validate numToSell againts pv.numAvailable
Catalog c = new Catalog(pv, numToSell)
catalogRepository.save(c)
}
}
class Catalog {
Catalog(ProductValue pv, int numberToSell) {
if (pv.numAvailable < numberToSell) throw new IllegalArgumentException();
setSku(pv.sku);
setAmount(numberToSell);
}
}
还是应该将服务传递到目录中
class CatalogApplicationService {
void createCatalog(ProductId productId, int numToSell) {
Catalog c = new Catalog(productService, numToSell)
catalogRepository.save(c)
}
}
class Catalog {
Catalog(ProductService productService, int numberToSell) {
ProductValue pv = productService.byId(productId)
if (pv.numAvailable < numberToSell) throw new IllegalArgumentException();
setSku(pv.sku);
setAmount(numberToSell);
}
}
您不应将服务注入聚合( Catalog
)内部,而应将数据传递给它们,以保持其尽可能干净,而没有不必要的依赖关系。
同样,您应该在代码中使用通用语言(UL)。 例如,抛出通用的IllegalArgumentException
似乎不是来自您的UL。
验证业务逻辑通常是在服务层进行的。 模型应保持为仅包含数据,而不是逻辑。 因此,建议您使用第一个解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.