DDD-将商品添加到订单/收据时的价格计算

问题描述 投票:1回答:1

我正在尝试在我的最新项目中应用DDD。尽管我在确定将业务逻辑/计算放在何处时遇到问题。

首先,我将描述业务流程,然后描述如何实现这一目标。

业务流程:这只是要将收据项目添加到收据中。但是,物品的价格取决于客户的类型和物品的数量。

即:'A'类型的客户想购买2顿饭。在他的设置中,他可以享受1顿午餐的折扣,但由于他非常饿,他需要2顿午餐。第一顿饭应为4欧元(折扣),第二顿饭应为6欧元(全价)。

我在想的是:

Product-实体(具有不同的有限上下文,将仅用作输入参数)-字段:代码,名称,...,价格集合分别用于不同的客户类型。

ReceiptItem-实体-字段:产品代码,产品名称,数量,价格,...Receipt作为汇总根-字段:客户(实体)-包含ReceiptItems的集合

[在收据上,将有一种方法addItem(Product product, int count),我计划在此方法内添加正确的价格计算。

回到我们的示例:receipt.addItem('menu1', 2)

因此,我将检查客户类型以及允许他打折的午餐数量。鉴于以上示例,我将看到他被允许。然后,我需要获取实际的折扣价,然后直接从公开了getCustomersPrice(customerid)方法的产品中获取折扣价。最后,我将在收据中添加两个收据项目。它们将具有相同的产品代码,但价格不同。 (如果津贴为2或更多,我只会以折扣价将一件商品添加到收藏夹中,但将2件数计数)。

您会说这是一个好方法吗?我担心将产品作为输入参数传递给addItem。似乎会产生紧密的耦合。

谢谢。

我正在尝试在我的最新项目中应用DDD。虽然我在确定将业务逻辑/计算放在何处时遇到问题。首先,我将描述业务流程,然后描述我的工作方式...

domain-driven-design business-logic
1个回答
0
投票

Receipt聚合根应该较小:Receipt具有ReceiptItem s,这很好,但是Customer应该是其自己的聚合根。客户独立于收据而存在,并且优先选择小额聚合。

© www.soinside.com 2019 - 2024. All rights reserved.