2016-05-14 154 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