【发布时间】:2010-08-05 02:48:09
【问题描述】:
我需要一些关于如何为这个简单的分类 (?) 示例建模的建议:
我有一个产品。一个产品可以有不同的类型,例如 ProductType 1、ProductType 2 和 ProductType 3。所有产品都有一个部件号和一个名称。它们的不同之处在于价格的计算方式。
- 类型 1 的产品价格取决于该产品的数量。所以如果我有 5 个产品,价格是 $x。如果我有 20 个产品,价格是 $y,以此类推。
- 类型 2 的产品价格取决于每个产品的重量。如果重量为 5 公斤,则价格为 $x,以此类推。
- 第 3 类产品的价格很简单,例如每件产品的价格为 $x。
在我看来,每个“价格结构”都需要有一个专用的表/类。然后,产品将参考其价格结构,具体取决于产品的类型。您是只创建一个“产品类型”表并在 Product 类上有一个名为 Type 的属性,还是使用泛化,因此 Product 1/2/3 是 Product 的子类型? 将有 5 种不同的价格结构,并且价格的计算方式因每种类型而异。因此,计算订单总价的逻辑取决于每种产品类型。
你能给我一些关于如何以最佳方式建模的建议吗?如果我选择在 Product 类上有一个 Type 属性的方法,我想我会在我的代码中得到很多 if-else 语句。如果我选择对它们进行子类化,每个类都可以负责计算正确的价格,或者它被要求做的任何事情。
【问题讨论】:
-
对于特定类别的产品,价格是否也取决于实际零件编号,还是该类别的所有产品都相同?例如,所有第 3 类产品的价格都是 x 美元,还是您只是说它们是固定的并且与重量/数量无关?
-
假设我销售 2000 件一件产品。如果产品是类型 1,价格将使用类型 1 的价格结构计算。如果它是类型 2,则必须使用另一个计算,依此类推。这能回答你的问题吗?
-
我不同意子类化处理这种设计的最佳方式(见下面我的回答)。除此之外,这个 stackoverflow 讨论有很多关于将对象层次结构映射到关系数据库的良好反馈:stackoverflow.com/questions/3413459/…
标签: oop data-modeling subclassing categorization