下面是一个关于软件设计的问题。我会给出一个容易理解的具体(但是是假设的)例子。OO设计:如果我是一个对象,我应该创建自己还是将使用我的东西
想象一下,我正在创建一个每日交易网站。我有两类Deal和Merchant。一般来说,应该在Deal类还是Merchant类上使用createDeal()方法?
Deal类是一个交易,所以它是有意义的在那里。
商家是创造这笔交易的商家,所以在那里有意义。
或者可能有一个混合的答案,或者可能没有具体的答案。
在此先感谢您的意见。
下面是一个关于软件设计的问题。我会给出一个容易理解的具体(但是是假设的)例子。OO设计:如果我是一个对象,我应该创建自己还是将使用我的东西
想象一下,我正在创建一个每日交易网站。我有两类Deal和Merchant。一般来说,应该在Deal类还是Merchant类上使用createDeal()方法?
Deal类是一个交易,所以它是有意义的在那里。
商家是创造这笔交易的商家,所以在那里有意义。
或者可能有一个混合的答案,或者可能没有具体的答案。
在此先感谢您的意见。
是的,从真实世界的角度来看它是有道理的,如果Merchant
创建每个Deal
。
但是它在编程时会崩溃。其实你应该有一个DealBuilder
(或工厂.. 是区别)的实例,你提供给Merchant
在构造函数中。然后商家可以使用该构建器创建新的Deal
并将其添加到当前交易列表中。
更新:
还有另一种方式来组织这样的:你可以创建Merchant
外Deal
的实例,然后addDeal
到商家的交易的“池子”。
这取决于你如何决定让应用程序工作。
您可以实现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
我希望帮助你!
我认为“Deal”和“Marchent”之间存在“有”关系。如果我没有错,那么“Marchent”有“Deal”。 “交易”可能是单数或复数。
我的suggession你应该保留在“Marchent”中。
但它完全取决于您的要求和体系结构。