[英]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.