【问题标题】:Is my OOP design correct?我的 OOP 设计是否正确?
【发布时间】:2011-10-19 21:10:32
【问题描述】:

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

场景是这样的:

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

方法一:

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

方法二:

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

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

你怎么看?

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

感谢您的宝贵时间。

【问题讨论】:

    标签: c# oop ooad


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 如果我引入新的复杂性,例如一些供应商提供折扣而其他供应商不提供,该怎么办。那么哪个更好呢?
      • 您可以使用装饰器为特定类添加更多行为,有很多选项.. 这真的取决于您现在需要解决什么问题,如果折扣可能适用于所有供应商那么您可能仍然对选项 2 和单个 if.. 感到满意。在您知道它们会发生之前,不要尝试过度复杂化您对未来需求的设计思考
      • 好的。如果行为不同,请创建抽象。否则坚持一堂课。
      猜你喜欢
      • 1970-01-01
      • 2015-08-24
      • 1970-01-01
      • 1970-01-01
      • 2019-08-08
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      • 1970-01-01
      相关资源
      最近更新 更多