很难确定如何模拟预期的产品行为。
基本上,客户的库存是按照产品和skus进行管理的。
产品有很多skus,但是一个sku会占用几个产品属性。</ p>
让我举个例子。
假设我卖给你一件衬衫。 “衬衫”是带有一些产品ID的产品。如果它有小型,中型,大型,则每种尺寸都与sku#相关联。
到目前为止很容易,但如果衬衫也有多种颜色,让我们说红色,黄色和绿色,那么将会有9个skus(红色/小号,红色/中号,红色/大号,黄色/小号,等等。)再加上不同产品的属性类型可能不同的挑战。衬衫可能有尺寸和颜色,手提包可能有不同的手柄样式或图案,我不会提前知道,这些是客户需要能够以一种特殊的方式输入的东西。
有关如何从DDD角度处理此问题的任何想法?我已经把面条烤了几天了。
感谢。
答案 0 :(得分:2)
首先,您必须将每个sku视为单个产品属性,而不是将它们组合在一起。如果产品可以具有颜色和尺寸,则这些是两个不同的属性,而不是一个(如红色/小,红色/中等)。假设一个产品有五个属性,每个属性有4个可能的值。然后你会有4^5=1024
skus。这很快成为维护的噩梦。
因此,域模型中的前两个对象应为ProductDefinition
和Attribute
。我选择ProductDefinition
作为名称而非Product
的原因是,这只是某种产品类型的标签,例如衬衫。它还不是一件小黄色衬衫。
属性可以有可能的值,因此这会产生第三个域对象:AttributeValue
。 Attribute
和AttributeValue
之间的关系为1:n。属性具有多个值,值仅属于一个属性。
请注意,AttributeValue
包含属性的所有可能的值,而不是单个产品的实际值。此实际值成为ProductDefinition
,Attribute
和AttributeValue
: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
内容(ProductId
,ProductDefinitionId
,AttributeId
,AttributeValueId
):
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
答案 1 :(得分:0)
我们做了这样的系统..
ProductDefinition has Type (Shirt, Handbag) has many ProductFieldDefinition ProductFieldDefinition has Type (Color, size, pattern) Product has ProductDefinition has SKU has many ProductField has ProductFieldDefinition has Value
我将在系统中更改的一件事是我会使用文档数据库存储所有内容,但在我们的情况下,图表实际上更深入,每个级别都有自己的字段。