2016-05-14 152 views
5

我有一項服務必須通過某些屬性返回人員。我看到一些關於命名這些方法的兩種策略:Java方法命名約定和重載

第一招:

getPersonById(int id) 
getPersonByBirthDate(Date date) 
getPersonByBirthDateAndSex(Date date,Sex sex) 
getPersonByNameAndSex(String name,Sex sex) 
getPersonByBirthDateAndNameAndSex(Date date,String name,Sex sex) 
etc.. 

或應用重載規則執行以下操作:

getPerson(int id) 
getPerson(Date date) 
getPerson(Date date,Sex sex) 
getPerson(String name,Sex sex) 
getPerson(Date date,String name,Sex sex) 

根據Java命名約定哪個是正確的?

+0

都可以通過命名傳達。但是,在企業界和通過清潔代碼原則,它更好地使用第一個選項,因爲名稱解釋了它在做什麼... –

+0

是的我同意@AdnanIsajbegovic或您可以使用構造函數重要的值爲休息獲取者首選 – emotionlessbananas

+0

第一個 - 代碼證明自己的方式。在第二種情況下,您可能不得不詢問您的IDE實際上調用了哪種方法,從而使代碼更加快速易讀。 –

回答

2

重載總是更好。 許多基於java的KNOWN框架都遵循這種方法。 此外,超載的主要概念是因爲你提到的條件。

重載方法簡化了開發人員的可讀性,因爲不需要記住單獨的名稱。 此外,日蝕的Ctrl + 空間功能將始終建議使用哪種方法。

+0

什麼是「_KNOWN framework_」? –

+0

您可以提供JDK的示例(例如'StringBuider#append') – Andrew

+0

@BoristheSpider ATG(「Art Technology Group」),Broadleaf Commerce,甚至Java的庫都使用這種方法。最「已知」方法「println()」也被重載。 :) – Monis

9

獨立於您的設計遭受組合式API爆炸的重載問題:您開始爲所有可能的搜索標準組合引入方法。另一種方法是引入一個收集標準的建築商,最後返回這個人。

例子:

queryPerson().byId(5).run(); 
queryPerson().byName("John").bySex(Sex.MALE).run(); 
queryPerson().bySex(Sex.FEMALE).run(); 

上述服務API現在只能有一個很好的方法queryPerson()

+0

@fabian,好主意,改成'queryPerson' – wero