下面是一個關於軟件設計的問題。我會給出一個容易理解的具體(但是是假設的)例子。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」中。
但它完全取決於您的要求和體系結構。