2010-11-12 65 views
0

我正在查看一些我寫過的代碼,並且在思考「我應該將該對象傳遞給該方法還是其某些屬性?」。哲學對象/屬性參數查詢

讓我解釋一下:

這個對象有大約15屬性 - 用戶輸入。然後我有大約10種方法使用多達5個這些輸入。現在,如果每個方法都有1個參數 - 「用戶輸入對象」,界面看起來更清晰。但是每種方法都不需要所有這些屬性。我可以傳遞每個方法所需的屬性。

事實上,我問這個問題表明我接受我可能會做錯事。

討論...... :)

編輯:要添加calrity:

從網頁用戶進入他們的房子和花園的詳細信息。這種性質的門的數量,房間數量和其他屬性(共15個)。

這些細節作爲簡單整數屬性存儲在「HouseDetails」對象中。

「HouseDetails」的一個實例被傳入「HouseRequirementsCalculator」。這個類有10個私人方法,如「計算地毯面積」,「caclulateExtensionPotential」等。

對於我的查詢的例子,我們使用「CalculateAreaOfCarpet」方法。

  • 我應該通過 「HouseDetails」 對象

  • ,或者我應該通過 「HouseDetails.MainRoomArea,HouseDetails.KitchenArea,HouseDetails.BathroomArea」 等基於我的回答上述

+0

可能的重複:http://stackoverflow.com/questions/3744806/best-way-to-pass-values-to-a-function-when-there-are-many-to-send/3744851#3744851 – rkg 2010-11-12 14:38:49

+0

我(可能我們)理解得很好。我認爲你應該通過HouseDetails對象而不是單個參數。我在下面修改了我的答案。 – 2010-11-12 17:12:28

回答

0

並與您的相關編輯

a)您應通過「HouseDetails」 對象

其他的想法:

更多地考慮你的問題,特別是增加的細節我留下想知道你爲什麼會不只是包括那些計算方法爲您HouseDetails的一部分目的。畢竟,它們只是針對該對象的計算。爲什麼要創建一個接口和另一個類來分別管理計算?

舊文:

每個方法應該和會知道的一部分傳入的對象時,它需要引用,以獲取其完成工作。您不必/不應該通過在界面中創建細粒度的重載來強制實施這些知識。傳入的對象是您的模型和您的合同。

另外,想象一下,如果您從該對象中添加和刪除屬性,會影響多少代碼。把事情簡單化。

0

傳遞個別屬性 - 在每種情況下都不相同 - 看起來很雜亂。我寧願傳遞整個對象。

請注意,您對您的情況沒有足夠的瞭解。也許試圖描述這個事情的實際用法?這個具有15個屬性的對象是什麼?是那些「使用多達5個這些輸入的10個方法」在同一個對象上,還是其他的一個?

問題被編輯

後,我一定要與傳遞整個對象去了計算器類做必要的計算。

另一方面,您可能會發現域驅動設計一個有吸引力的替代(http://en.wikipedia.org/wiki/Domain-driven_design)。關於這些原則,您可以將計算器的方法添加到HouseDetails類。領域驅動設計是相當不錯的寫作風格,取決於這種方式對你的乾淨程度。

+0

爲了清晰起見,我編輯了原始問題。 – 2010-11-12 14:54:04

+0

完成,編輯我的答案。 – 2010-11-13 17:50:30