我有库存,目录和销售有限的上下文。
我有这个不变量:
创建目录时,我们销售的产品不能超过库存中的产品
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);
}
}
答案 0 :(得分:1)
您不应在聚合(Catalog
)中注入服务,而是将数据传递给它们,以使它们尽可能保持干净,而不会产生不必要的依赖。
此外,您应该在整个代码中使用无处不在的语言(UL)。例如,抛出通用IllegalArgumentException
似乎并非来自您的UL。
答案 1 :(得分:0)
验证业务逻辑通常在 Service 层完成。模型应保持仅包含数据,而不是逻辑。因此,建议您使用第一个解决方案。