OO设计:如果我是一个对象,我应该创建自己,还是使用我的东西

时间:2012-03-25 09:51:23

标签: oop

这是一个关于软件设计的问题。我将给出一个易于理解的具体(但假设)的例子。

想象一下,我正在创建一个每日交易网站。我有两个类Deal和Merchant。通常,createDeal()方法应该在Deal类还是Merchant类上?

Deal类是一个交易,所以在那里是有意义的。

商人是创造交易的人,所以在那里是有意义的。

或者可能存在混合答案,或者可能没有具体答案。

提前感谢您的意见。

3 个答案:

答案 0 :(得分:1)

是的,从真实世界的角度,如果Merchant创建了每个Deal,那将是有意义的。

但是在编程方面却崩溃了。实际上你应该有一个DealBuilder(或工厂...... 区别)的实例,你提供给构造函数中的Merchant。然后,商家可以使用此构建器创建新的Deal并将其添加到当前交易列表中。

<强>更新

还有另一种方法可以对此进行整理:您可以在Deal之外创建Merchant的实例,然后在商家的“交易池”中创建addDeal

答案 1 :(得分:1)

这取决于您决定如何使用该应用程序。

您可以实施Deal类来为自己的实例提供服务(例如Singleton,但不是这种情况),或者您可以在Merchant中使用一种方法来调用新的交易。

在伪代码中,我认为您的最佳方法应该类似于:

Class Merchant
  method offer_deal(var item, var discount)
    deal = new Deal();
    deal.item = item;
    deal.price = item.price * (1-discount);
    return deal;
  end_method

  ...

End_Class

我希望能帮到你!!

答案 2 :(得分:0)

我认为“Deal”和“Marchent”之间存在“有”关系。如果我没有错,那么“Marchent”就有了“交易”。 “交易”可以是单数或复数。

我的建议你应该把它留在“Marchent”中。

但这完全取决于您的要求和架构。