簡體   English   中英

我應該從應用程序服務或實體獲得其他匯總值嗎?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM