2012-03-25 89 views
-1

下面是一个关于软件设计的问题。我会给出一个容易理解的具体(但是是假设的)例子。OO设计:如果我是一个对象,我应该创建自己还是将使用我的东西

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

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

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

或者可能有一个混合的答案,或者可能没有具体的答案。

在此先感谢您的意见。

回答

1

是的,从真实世界的角度来看它是有道理的,如果Merchant创建每个Deal

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

更新:

还有另一种方式来组织这样的:你可以创建MerchantDeal的实例,然后addDeal到商家的交易的“池子”。

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 

我希望帮助你!

0

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

我的suggession你应该保留在“Marchent”中。

但它完全取决于您的要求和体系结构。

相关问题