我有两种类型的产品的优惠折扣(10%盘)和NonDiscounted(0%)的每一个这些既可以是LocalProduct/ExportableProduct与出口的一个吸引了15%的销售税。

什么是最好的方式模型,这种情况。我是绝对的新手S/W设计,我有非常有限的想法 1.有4种不同的产品的分类 2.使用战略的图案,有4种不同的战略。

可能一些人请建议我怎么可以这个模型有效地使用上述选项或其他的。

有帮助吗?

解决方案

类区分设定的行为。因此,让我们看看你的部门在这些条款:

  • 而一个参数可能是由于优惠/非优惠的是一个变化中的行为,这是微不足道,以减少这个对单一行为:所有产品都有一定的折扣,但数量折扣的情况以0%的非优惠产品。这只是一个属性的产品(discount_amount),不是一个单独的类。

  • 地方/出口可能或不可能具有不同的行为。如果唯一的区别是产品是否允许运送国际或没有,那么一个简单的布尔国旗应该处理这种区分超过充分。如果,另一方面,可导出的产品要求的行为不支持通过本地产品(例如,记录的海关要求和程序),那么它将适当使ExportableProduct的一个子类LocalProduct(如果可出口的产品的行为是一个超的当地产品的行为)或者使一个抽象的产品类LocalProduct和ExportableProduct子类(如果当地产品,也有的行为是不支持的出口产品)。

其他提示

要保持简单,问问自己,如果折扣真的需要一个亚型,或者它可能是产品,其中“NonDiscounted”有百分之零折扣的属性。

我这样做:

有一个称为“产品”具有像名称,描述,类型,等等。

的产品的基本性质的类

在碱“产品”类可以有一个所谓的“DiscountRate”属性。它可以是0非贴现和任何价值打了折扣。这将有助于简化计算,因为相同的公式将总是被施加,只需在一种情况下的折扣是0。

然后,你可以有两个类“ExportableProduct”和“LocalProduct”,他们都从“产品”类继承。

我建议也许贴现/ NonDiscounted不应该是型号的产品都没有。相反,有两个亚型,和“折扣”属性/父产品领域。然后,每个产品可以有效有任何折扣。这还允许对于没有固定为10%的折扣。

我会避免继承(即子打字)只是这一点。

相反,我会定义折扣/ NonDiscounted和本地/ ExportableProduct枚举。然后,每个产品类只会有一个属性对每个这些指示其类型。

然后,在一个单独的类,例如:PricingCalculator,限定一个接受产品的实例的方法计算(可能静态)。该方法简单地检查枚举属性和在计算中应用所需的百分比值。

这完全分离的定价从产品本身的计算可以让你保持有时是复杂的定价计算在一个位置。当你的定价机制随时间而改变,这种做法是很容易维护和测试。

我会避免一切,只是有两个属性:discountlocal

由于只有一个改变(价格),你可以计算出它的飞行(折扣=> price * .9,出口=> price * .85 - 甚至两者=>出口及折扣=> price * .9 * .85)的事情

继承时特别有用的更多比事情而变化根据所述类型。

例如,如果折扣,税收,以及所有向变取决于项目的类型的运输方式,那么它肯定时间考虑继承和子类(你会说“这亚型项目有这个税此折扣以及此货运“)。

在当只有一两件事而变化根据类型,那么它的不太明显是否值得具有几种类型的(即,一个基本类型与子类)。另一方面,或者代替是否方差可以建模更简单地作为一个单一型,它的实例有一个属性值(例如命名为 “DISCOUNT_PERCENTAGE”)。

当这是全部您将需要,只需在你的产品分类二布尔和他们交换的行为是最好的解决方案。 YAGNI。

但恐怕这是一个更大的问题的只是一小部分。然后,你要问自己:是什么让一个产品一个产品(单一职责)。应纳税和discountability可能有两个不同的关注点,所以你的产品有两种策略结束。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top