2016-01-25 31 views
2

例如,如果我有方法A,其接收4個參數我應該將一個方法的所有參數包裝到一個包裝類中嗎?

methodA(String,String,Object,Object)

我認爲它會看起來更清潔,如果我使用一個目的是包裹它們。

methodA(ParamObject) 

但是我不知道它是否對性能有不利影響?

+5

性能之前關注正確性,可讀性和可維護性:如果將這四個*參數傳遞給很多地方,那麼知道如果傳遞一個包裝器對象時正確地傳遞了它們會更容易,因爲你知道你並不是意外地顛倒了字符串/對象的順序;在所有這些呼叫站點中添加一個新參數也很容易,因爲您只需更新包裝器。我懷疑你會注意到性能差異,但實際上你必須爲你的特定應用測試它。 –

+0

長參數列表是一個[代碼氣味](http://blog.codinghorror.com/code-smells/),但我認爲4是一個合理的參數數量,除非它們總是屬於某個對象 –

回答

2

性能是您在選擇API方法簽名時應該擔心的最後一件事。更重要的問題是您的API的可讀性和可維護性,這可能會受到您將參數組合在一起的決定的嚴重影響。

首先要考慮的是將某些或全部參數分組是否合乎邏輯。例如,如果你有一個看起來像這樣

public void doSomething(String first, String last, Date dob) { 
    ... 
} 

其中三個參數代表一個人的名字的API,姓氏和出生日期,然後改變了API來

public void doSomething(Person p) { 
    ... 
} 

非常有意義。

另一方面,如果各個參數彼此不相關,除了通過參數來使用相同的方法,那麼只要您打算用類似的方法做一些其他的事情,調用參數,比如將它們存儲起來供以後使用,將它們作爲單個單元轉發給其他方法等等。

否則,您應該保留單個參數而不是製作參數特定的類。

相關問題