繁体   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