2016-08-15 77 views
1

我有多個用戶需要搜索的數據庫。用戶可以有多個實例,應用程序會檢查用戶是否在不同的數據庫中重複。方法簽名重構

因此,每個用戶都與一個客戶端關聯,並且這些字段根據客戶端的不同而被填充。 (我知道這是不對的,但這是繼承的應用程序)我的想法是通過將客戶端作爲參數添加到getUserData方法中來重構它。但是我意識到這是一種防止變味的氣味。有很多包裝方法會傳遞默認值。我還必須遍歷調用層次結構,以便我可以訪問要傳入的客戶端對象。這可能是五個或五個方法調用,所以我將不得不更改這些調用。在這一點上,應用程序開發(由其他開發人員)的方式非常僵化,我期待着改進它。

的getUserData方法:包裝方法的

public User getUserData(String userId, boolean fullUserRecord, Date userStartDate){ 
    //retrive userdata from db 
    //attach client specific data for user 

} 

例子:

public User getUserData(String userId, Date userStartDate){ 
    getUserData(userId, false, userStartDate) 

} 

我的問題是,我該如何最好地處理這個。目前我正在改變方法簽名的兔子洞,但如果這需要再次改變,我將不得不做同樣的事情,這將不會很有趣。

回答

1

包裝方法沒有任何用途。 引入一個參數對象,並在可能的情況下內聯包裝器方法。

「引入參數對象」重構:

+0

所以,因爲我有一個鏈接到我想改變方法簽名許多鏈式調用,我應該使用保存整個對象並在調用鏈的開始處重新開始重構? – ephemeralCoder

+0

我會做相反的事情:從底部開始,您可以看到所有參數,然後逐漸內聯。此外,如果許多參數是可選的,則可以爲參數對象創建專門的構造函數或方法工廠。如果這有助於可讀性,您甚至可以進一步創建流暢的構建器。 – JnRouvignac

+0

我最終創建了帶有專門構造函數的參數對象。現在代碼更易於管理。我可能會考慮爲該對象創建一個構建器,使其更具可讀性。謝謝! – ephemeralCoder