gpt4 book ai didi

domain-driven-design - 在电子商务网站上开始使用领域驱动设计

转载 作者:行者123 更新时间:2023-12-04 08:20:51 25 4
gpt4 key购买 nike

很难弄清楚如何对预期的产品行为进行建模。

基本上,客户的库存是按照产品和 skus 进行管理的。

一个产品有多个 sku,但一个 sku 说明多个产品属性。

让我举个例子吧。

假设我要卖给你一件衬衫。 “衬衫”是具有某些产品 ID 的产品。如果它有小号、中号、大号,那么这些尺寸中的每一个都将与一个 sku # 相关联。

到目前为止很容易,但如果衬衫也有多种颜色,比如红色、黄色和绿色,那么将有九个 skus(红色/小号、红色/中号、红色/大号、黄色/小号,等等)。

除此之外,还有一个挑战,即不同产品的属性类型可能不同。衬衫可能有尺寸和颜色,手提包可能有不同的提手样式或图案,我不会提前知道,这些都是客户需要能够以临时方式输入的东西。

关于如何从 DDD 的角度解决这个问题的任何想法?我已经在上面烤面条几天了。

谢谢。

最佳答案

首先,您必须将每个 sku 视为单个产品属性,而不是将它们组合在一起。如果产品可以有颜色和尺寸,那么这是两个不同的属性,而不是一个(如红色/小号、红色/中号等)。假设一个产品有五个属性,每个属性有 4 个可能的值。然后你会有 4^5=1024斯库斯。这很快就变成了维护噩梦。

因此,域模型中的前两个对象应该是 ProductDefinitionAttribute .我选择的理由ProductDefinition作为名称而不是 Product是因为这只是某些产品类型的标签,例如衬衫。还不是小黄衫。

属性可以有可能的值,因此这构成了第三个域对象:AttributeValue . Attribute之间的关系和 AttributeValue是 1:n。一个属性有多个值,一个值只属于一个属性。

请注意 AttributeValue包含属性的所有可能值,而不是单个产品的实际值。这个实际值变成了 ProductDefinition 之间的关系, AttributeAttributeValue :ProductAttributeValue .以数据库模型中的衬衫示例为例:

ProductDefinition   Attribute       AttributeValue
1 | Shirt 1 | Color 1 | 1 | Red
2 | Size 2 | 1 | Yellow
3 | 1 | Green
4 | 2 | Small
5 | 2 | Medium
6 | 2 | Large

我们现在对一个产品定义、两个属性和每个属性的三个属性值进行建模。假设现在我们要为三件衬衫建模:一件小的红色,一件小的绿色和一件大的黄色。这导致以下 ProductAttributeValue内容( ProductIdProductDefinitionIdAttributeIdAttributeValueId ):
ProductAttributeValue
1 | 1 | 1 | 1
1 | 1 | 2 | 4
2 | 1 | 1 | 3
2 | 1 | 2 | 4
3 | 1 | 1 | 2
3 | 1 | 2 | 2

关于domain-driven-design - 在电子商务网站上开始使用领域驱动设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3173205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com