1

我有一个场景,我正在为零售商设计一个系统。这不是一个合适的实时应用程序,而只是一个检查我的 OO 设计技能是否正确以及我的思维是否正确的场景。我还在这儿学习。我在 c# 中这样做。

场景是这样的:

一家销售固定产品的零售商想要设计一个系统,该系统将从他的各种固定数量的供应商中选择最优惠的价格并向该供应商下订单。为简单起见,我将固定产品缩减为同一公司的一种产品,即 XYZ 笔。当被询问时,每个供应商都将提供 XYZ 笔的报价,并且零售商系统从各个卖家中选择最优惠的价格并从该卖家下订单。

方法一:

  1. 为供应商创建一个抽象类并为每个供应商创建一个实现。
  2. 每个供应商实现都有一个 PlaceOrder() 方法和一个成本属性。
  3. DataLayer 为每个供应商实现设置成本属性。
  4. 创建一个 CheckBestRetailer 类,该类评估每个实现以获得最佳价格并在适当的实现上下订单。

方法二:

  1. 使用 Cost 属性和 PlaceOrder() 方法创建类型供应商列表。
  2. 对于每个供应商,数据层将新的供应商类型添加到列表中,并设置从数据库中获取的成本详细信息。
  3. CheckBestRetailer 类循环遍历该列表并评估每个对象以获得最佳价格,并在适当的实现上下订单。

在上述两个中,我觉得方法 1 更接近 OOP,但前提是我有固定数量的供应商。如果供应商的数量可以根据从数据库中检索到的数据而改变,那么方法 2 会更好。

你怎么看?

我可能没有最好的方案来测试我的 OOAD。希望有一些我也可以使用的示例场景……如果可能的话,带有设计提示。

谢谢你的时间。

4

2 回答 2

3

我会说方法2更好。无需为每个供应商创建唯一的类,因为供应商的行为几乎相同。

于 2011-08-04T10:53:09.883 回答
3

如果您对每个供应商有不同的行为,选项 1 会更合适,在这种情况下,似乎选择选项 2 是一个更好的选择,因为它更简单。

当我不知道如何解决某事时,我通常会做的是:

  • 列出我的要求:在给定供应商集合的情况下,为一件商品获得最优惠的价格。
  • 创建候选对象列表:供应商、项目、零售商等。
  • 使用我认为有意义的关系绘制或布局类
  • 当我迷路时,我开始为需求编写主要类,在这种情况下,它将是 Retailers 和 GetBestRetailer() 方法。

对于上述任何一项,无论您是否错了都无关紧要,这是一种头脑风暴,可以更好地了解您必须实现的目标以及您找到的选择。

每次遇到看似困难的事情时,我都会通过创建一个返回所需答案的方法或创建一个新类(如果这似乎更有意义)来抽象它。作为一个练习,我尝试认为“困难/复杂”部分将由其他人编码,并通过委托给一个方法或类,我将其与我现在关注的问题部分分开。

hth

于 2011-08-04T10:54:51.103 回答