2012-05-22 72 views
3

嗨Stackoverflow社區,最佳實踐 - HashMap而不是參數列表,好主意?

我正在處理一些代碼,其中的可選標準條件列表提交給我的道。 方法簽名包含+/- 10個參數的列表,我真的不喜歡並且想要重新格式化。 另外,我想,以避免重構,從不同的層上的所有方法簽名,只是因爲我添加/刪除一個標準

List searchParams(String name, Long countryCode, ...){ 
... 
} 

將成爲

​​

我有點擔心這一點,因爲這是一種不好的做法,因爲我放棄了對地圖中傳遞的內容的控制,以給予我靈活性?所以我的問題是,如果我正在以這種方式進行正確的道路?

回答

8

當我遇到這樣的情況時,我傾向於創建一個Params類,並通過左右。好處是:

  • 不像當使用Map時,你可以有有意義的getter/settings,適當的驗證等;
  • 它的類型安全和自我描述(意味着很容易找到可用的參數及其類型)。
  • 您可以添加新參數而不必重構任何中間層。
+0

+1瞭解優勢清單 – n00begon

2

你可以定義一個新的類來保存/處理你的參數集,這樣你就可以獲得比H​​ashMap更多的控制權。惱人的寫作,或至少乏味,但似乎更好地控制靈活性之間的平衡。

2

您可以查看您的參數,看看是否可以將它們作爲邏輯組包裝到對象中。例如,一個名稱的國家代碼可以是一個人對象

public Person { 
    private String name; 
    private String countryCode; 
} 

然後,你將只是向下傳遞這個對象,可以使用getter方法來獲取數據出來應該是更容易閱讀和維護比需要知道在多個圖層上的HashMap的所有密鑰。

1

使用地圖的唯一情況是,當您設計工廠時,您需要將不同類型的參數傳遞給正在創建的不同類。在所有其他情況下,具有專門的參數信息類的解決方案將是首選。

對於其中通過一個地圖爲宜,看看DriverManager.getConnection方法的一個例子:該方法需要將參數傳遞給所創建的Connection的特定驅動程序的實施方式中的構造,所以也包裝了一個地圖分成​​,並讓用戶將它傳遞給驅動程序特定的連接。請注意,DriverManager沒有其他解決方案可以滿足未來需求。

我強烈建議不要在所有其他情況下使用地圖:增加的靈活性將錯誤檢測從編譯時轉移到運行時,這有很大的潛力可以讓您的頭痛超出您的想象。