2016-05-14 12 views
5

Ich habe einen Dienst, der Person durch einige Eigenschaften zurückgeben muss. Und ich sehe zwei Strategien für diese Methoden zu benennen:Java-Methode Namenskonventionen und Überladung

Die erste:

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

oder Anwendung Überlastung Regeln wie folgt vor:

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

Welches Recht ist nach Java-Namenskonvention?

+0

beide sind in Ordnung, indem Konventionen benannt werden. Aber, in der Unternehmenswelt und durch Clean Code Prinzip, ist es besser, erste Option zu verwenden, da der Name erklärt, was es tut ... –

+0

ja ich stimme mit @AdnnIsajbegovic oder Sie können Konstruktor für wichtige Werte für Rest Getter sind bevorzugt – emotionlessbananas

+0

Die Erstens - so dokumentiert sich der Code selbst. Bei der zweiten Frage müssen Sie möglicherweise Ihre IDE fragen, welche Methode tatsächlich aufgerufen wird, wodurch der Code weniger schnell lesbar wird. –

Antwort

2

Überladung ist immer besser. Viele Java-basierte KNOWN-Frameworks folgen diesem Ansatz. Auch das Hauptkonzept der Überladung ist wegen der Bedingung, die Sie erwähnten.

Überladene Methoden vereinfachen die Lesbarkeit des Entwicklers, da keine separaten Namen gespeichert werden müssen. Eclipse Ctrl + Space Funktion würde immer vorschlagen, welche Methode man verwenden möchte.

+0

Was ist ein "_KNOWN Framework_"? –

+0

können Sie Beispiele aus JDK bereitstellen (z. B. 'StringBuider # append') – Andrew

+0

@BoristheSpider ATG (" Art Technology Group "), Broadleaf Commerce, verwenden sogar Java-Bibliotheken diesen Ansatz. Die "KNOWN" -Methode "println()" ist ebenfalls überladen. :) – Monis

9

Unabhängig von der Überladungsfrage leidet Ihr Design unter kombinatorischer API-Explosion: Sie beginnen, Methoden für alle möglichen Kombinationen von Suchkriterien einzuführen. Eine Alternative wäre, einen Erbauer einzuführen, der Kriterien sammelt und am Ende die Person zurückbringt.

Beispiel:

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

Und der Service API hat jetzt nur noch eine schöne queryPerson() Methode.

+0

@fabian, gute Idee, geändert zu 'queryPerson' – wero

Verwandte Themen