0

在我们的电子商务应用程序中,我们有不同种类的产品,它们具有不同的属性,例如,鞋子与可食用蛋糕具有不同的销售特征。我们的电子商务网站允许您“构建”您自己的产品,选择各种属性和值(例如杯子蛋糕上的粉红色糖霜,这会增加 0.25 美元的成本)。

我们的第一个构造看起来像这样。这是一个需要维持的噩梦。 我正在寻找有关如何以更规范和现实的方式组装这些表(或对象)的建议。

我们有一个非常标准的产品表,其中包含比这更多的字段,但您明白了:

public class Product {
    public int      id     {get;set;}
    public string   name   {get;set;}
    public decimal  price  {get;set;}
}

我们有一个选项表,其中列出了可以为给定选项组选择的所有选项(考虑一个下拉列表):

public class Options {
    public int      oId     {get;set;}
    public string   oName   {get;set;}
    public decimal  oPrice  {get;set;}  // Added to base price if selected
}

然后我们有一个多对多表将这两者联系在一起,其中记录的存在将选项与该产品联系起来:

public class ProductOptions {
    public int     id       {get;set;}
    public string  oId      {get;set;}
}

我们正在尝试为相似的产品分配相似的选项,例如所有蛋糕通常具有相同的口味,所有糖霜通常具有相同的颜色等,因此当我们更改选项时,它会针对所有相关产品而更改。

任何建议都将不胜感激,尤其是在 DDD 方面。

4

1 回答 1

2

根据您的描述,听起来产品是一个或多个产品组的成员,并且这些产品组可以具有适用于其中所有产品的选项。

所以我要添加一个 ProductGroup 表,添加一个 ProductGroupOptions 关系表,以便您可以将选项应用于 ProductGroup,以及一个 ProductGroupProduct 关系表,以便您可以定义哪些产品在哪些 ProductGroups 中。

例如 Cake X 是 ProductGroup "Cakes" 的成员,它可以有 A、B、C 口味

也许您还需要对 ProductOptions 进行分组,以便将一组产品选项作为一个包应用于 ProductGroup 或 Product。

例如,Cake X 是 ProductGroup "Cakes" 的成员,它使用 ProductOptionsGroup "Flavors",其中包括 "A"、"B"、"C"。

您需要决定是否还允许产品和风味之间的直接非分组关系,或者实际上是否更简单地说现在所有交互都通过组发生,如果您需要单个产品 -> 选项连接,您只需创建一个为每个分组并接受它只有一个成员。

总的来说,你会有类似的东西: -

一个产品属于一个或多个产品组

一个 ProductOption 属于一个或多个 ProductOptionGroups

ProductGroups 与 ProductOptionGroups 有许多关系

所以在 LINQ 中,你可以做一些事情,比如Product.ProductGroups.SelectMany(gp => gp.ProductOptionGroups.SelectMany(pog => pog.ProductOptions))获取给定产品的所有选项。

于 2010-03-24T06:43:09.343 回答