Notwendigkeit für separate Schnittstelle und impl für DAO

8

Wir haben eine typische n-tier-Java-Anwendung, und mir ist aufgefallen, dass unsere Datenzugriffsebenen DAO's haben, die vom Typ FooDAO und FooDAOImpl sind. Ich wollte die Notwendigkeit für die beiden rechtfertigen und hier ist meine Analyse.

  1. Wenn Sie mehrere Implementierungen für die gleiche Schnittstelle hatten, ist die Abstraktion hilfreich. Aber da wir uns bereits für den DAOImpl (iBATIS) entschieden haben, ist das wirklich notwendig?
  2. Hilfe bei der Vertretung über Spring. Aus dem, was ich erfahre, können Klassen, die Schnittstellen haben, einfach proxiiert werden (die JdkProxy-Route), anstatt Klassen, die keine Schnittstellen haben (wo die cglib-Route gewählt wird) und die Unterklasse die Klasse, die proxiiert werden soll. Subclassing hat seine Probleme, wenn die zu proxiegende Klasse endgültig ist oder keine Standardkonstruktoren hat - beides ist sehr unwahrscheinlich auf der Datenzugriffsebene. Leistung war früher ein Faktor, aber nach dem, was ich höre, ist das kein Grund zur Sorge mehr.
  3. Hilfe beim Spotten. Klassen mit Interfaces eignen sich eher dazu, sich über Frameworks lustig zu machen. Ich habe das nur gehört, aber nicht in der Praxis gesehen - kann mich also nicht wirklich darauf verlassen, aber vielleicht aufgrund der gleichen Faktoren, wie sie oben in # 2 erwähnt wurden.

Mit diesen Punkten fühle ich nicht das wirkliche Bedürfnis nach einem separaten FooDAO und FooDAOImpl, wo ein einfaches FooDAO ausreichen sollte. Fühlen Sie sich frei, irgendwelche der Punkte zu korrigieren, die ich erwähnt habe.

Vielen Dank im Voraus!

    
Kilokahn 04.07.2012, 05:58
quelle

3 Antworten

2

Ich habe versucht, # 3 mit Mockito und es war in der Lage, POJO's ohne Schnittstellen gut zu verspotten. Mit den Argumenten gegen # 1 und # 2 bin ich geneigt, vorerst nicht mit separaten DAO und DAOImpl zu gehen. Fühlen Sie sich frei, andere Punkte des Vergleichs hinzuzufügen.

    
Kilokahn 10.07.2012, 16:09
quelle
1

Ich sehe einen vierten Grund:

  • Implementierungsdetails verbergen

Abhängig vom Team, der voraussichtlichen Lebensdauer der Software oder der Menge der erwarteten Änderungen in der Zukunft lohnt es sich, so viel wie möglich zu verstecken, selbst wenn es nur eine Implementierung gibt.

    
Rainer Schwarze 04.07.2012 08:25
quelle
0

Ich würde sagen, dass das Vorhandensein einer FooDAO -Schnittstelle mit einer einzigen Implementierung FooDAOImpl generell ein Anti-Pattern ist. Die einfachere Lösung (keine separaten Schnittstellen für DAOs) ist viel vorzuziehen, es sei denn, Sie haben sonst einen soliden Grund - was hier nicht der Fall zu sein scheint.

Ich persönlich würde sogar noch weiter gehen und sagen, dass DAOs überhaupt nicht die beste Wahl sind. Ich bevorzuge es, eine einzige Persistenz-Fassadenklasse auf einer ORM-API wie Hibernate oder JPA zu implementieren. Vielleicht ist iBATIS dafür zu niedrig.

    
Rogério 10.07.2012 19:08
quelle

Tags und Links