Spring-Hibernate DAO-Namenskonvention?

8

Ist es typisch, DAOs folgendermaßen zu benennen:

%Vor%

Ich frage mich, ob es Standard ist, das Suffix "Impl" für die Implementierung zu verwenden oder ob etwas Sinnvolleres die beste Vorgehensweise ist. Danke.

    
oym 31.01.2010, 21:56
quelle

4 Antworten

7

Das ist im Allgemeinen, was ich benutze. Manchmal macht das Präfix Standard wie DefaultUserDAO mehr Sinn, wenn Sie eine Schnittstelle erstellen, von der Sie erwarten, dass sie implementiert wird, aber Sie stellen die Referenzimplementierung bereit.

Meistens fühle ich, dass diese zwei austauschbar verwendet werden können, aber in manchen Situationen liefert man ein wenig mehr Klarheit als die anderen.

    
Kevin 31.01.2010, 22:00
quelle
8

Es gibt zwei Konventionen, die ich gesehen habe:

  1. FooDao für die Schnittstelle und FooDaoImpl für die Implementierung
  2. IFooDao für die Schnittstelle und FooDao für die Implementierung

Ersteres hat seine Wurzeln in CORBA; Letzteres ist eine Microsoft COM / .NET-Konvention. (Danke an Pascal für die Korrektur.)

"Wiederhole das DAO nicht" ist eine gute Idee. Ich persönlich finde diesen Artikel komplexer als nötig. Es gibt einen Weg, es ohne Reflexion in Findern zu tun, die ich bevorzuge. Wenn Sie Hibernate verwenden, kann die Abfrage anhand eines Beispiels eine gute Möglichkeit sein, dies einfach zu tun. Die Schnittstelle würde eher so aussehen:

%Vor%     
duffymo 31.01.2010 22:29
quelle
4

Zuallererst - Sie brauchen möglicherweise nicht wirklich eine DAO-Klasse für jede Ihrer Klassen. Wiederhole nicht den DAO! -Artikel erklärt, was ein generisches DAO ist. Sich darüber zu wundern, wie man einen Standardcode benennt, ist nicht produktiv.

Wenn Sie nun ein generisches DAO haben, können Sie Folgendes tun:

  • DAO (Schnittstelle)
  • SessionDAO und EntityManagerDAO - für die Verwendung von Session oder EntityManager

Und natürlich, verwenden Sie das DAO nur über die Schnittstelle. Sie können problemlos zwischen Implementierungen wechseln.

(Ich bevorzuge es eigentlich in der unteren Hälfte - Dao , obwohl es eine Abkürzung ist und das Impl Suffix)

    
Bozho 31.01.2010 22:00
quelle
1

Ich war auch Fan von GenericDao und GenericDaoImpl-convention mit etwas Unterstützung von generischen Hilfsklassen, falls das Speichern oder Löschen zusätzliche Aktionen für einige persistente Klassen erfordern würde:

%Vor%

Ähnliche Konstrukte können auch zum Löschen verwendet werden. Dies ist besonders nützlich, wenn Sie eine Art von Ereignisprotokoll zum Schreiben jeder Aktivität benötigen und AOP nicht dafür verwenden möchten.

Mein GenericDaoImpl würde etwa so aussehen:

%Vor%

Was der persistListener im obigen Beispiel tut, ist einen PersistListener mit einer generischen Klasse zu finden, die zu der Klasse passt, die als Parameter angegeben wurde. Ist dies der Fall, wird der Anruf an die richtigen Zuhörer delegiert. Mein GenericInterfaceHandler kann auch verwendet werden, um nur den spezifischsten Handler oder den einzigen Handler für die gegebene Klasse zurückzugeben, falls vorhanden.

Wenn Sie interessiert sind, könnte ich die GenericInterfaceHandler-Implementierung auch posten, da sie bei vielen Gelegenheiten recht mächtig ist.

    
plouh 02.02.2010 07:48
quelle

Tags und Links