Ich habe mit SpringMVC, Hibernate und einigen Datenbanken in einem Java-Webanwendungsbeispiel gearbeitet.
Es gibt ein paar verschiedene, die dies tun, aber dieses Spring-3- und Hibernate-Integrationstutorial mit Beispiel enthält eine Modellklasse, eine Ansicht (in jsp) sowie eine Service- und eine Dao-Klasse für den Controller.
Meine Frage ist, machen nicht sowohl die Service- als auch die DAO-Klasse dasselbe? Warum brauchst du beide?
Dies war das Tutorial, das ich tatsächlich verwendete: http://fruzenshtein.com/spring-mvc-security-mysql-hibernate/
Ich bin der Verfasser der fraglichen Post. Ich habe meinen gerechten Anteil an der Arbeit an verschiedenen Technologien und verschiedenen Architekturen. Aufgrund der obigen Ausführungen kann ich mit Sicherheit sagen, dass es immer eine gute Idee ist, eine Service- und eine Dao-Schicht zu haben. DAO sollte auf das Hinzufügen / Aktualisieren / Einfügen / Auswählen von Entitätsobjekten in / aus der Datenbank beschränkt sein, und das ist alles. Wenn Sie weitere logische Schritte ausführen möchten, fügen Sie diese der Serviceebene hinzu. Dies hilft dabei, den Code modular zu gestalten und beim Ersetzen der Datenbank (für einen Teil der Daten) leicht zu ersetzen. Dies gilt insbesondere für Anwendungen mit Berichten, die auch nach dem Abrufen von Daten aus der Datenbank eine hohe Logik aufweisen.
Auch im Frühjahr wird Sicherheit in der Serviceschicht ideal angewendet. Sie möchten diesen Weg nicht ändern.
quelle
Adam Bien weist in seinem Buch darauf hin, dass der JPA EntityManager eine gute universelle Implementierung des DAO darstellt:
http://realworldpatterns.com/
In der Java EE-Welt muss fast nie ein eigenes DAO geschrieben werden, da JPA-Implementierungen eines enthalten. Sie müssen nur die Serviceschicht schreiben.
Das Implementieren einer eigenen DAO-Schicht ist wirklich ein Kater der sehr schlechten J2EE-Architektur von vor 15 Jahren, aber viele Menschen fühlen sich immer noch dazu gezwungen. Diese benutzerdefinierten DAO-Ebenen bieten häufig nur Weiterleitungsfunktionen, die die entsprechende Methode in EntityManager aufrufen.
Um Ihre Frage zu beantworten, benötigen Sie eine Service-Schicht und eine DAO, aber Sie müssen nur die Service-Schicht schreiben.
quelle
Normalerweise füge ich allen db-spezifischen Code (Abfragen) in DAOs und die Transaktionsbehandlung und Geschäftslogik in Services ein. Dies ermöglicht Service-Methoden, Methoden über mehrere Daos aufzurufen und alles in derselben Transaktion zu belassen. Meiner Meinung nach ermöglicht dies eine bessere Wiederverwendung von Code in Daos.
quelle
Ich habe festgestellt, dass die Service-Schicht in den meisten Fällen unnötige Komplexität hinzufügt. Theoretisch sollte vermieden werden, dass die Unternehmenslogik in der Dao-Schicht enthalten ist. Letztendlich führt dies jedoch nur zu Verwirrung. Selbst einige Leute haben es nicht gewohnt, die Dao-Schicht vollständig zu entfernen, da sie der Meinung sind, dass sie keinen Mehrwert bringt. http://ayende.com/blog/4784/architecting-in-the-pit-of-doom-the-evils-of-the-repository-abstraction-layer
Aber wenn Sie mehrere Geschäftslogiken haben, dann ist es eine gute Idee. Wie wichtig ist es, eine Serviceschicht zu erstellen?
quelle
IMHO kann die Service-Schicht als Schicht zwischen dem Controller und der DAO-Schicht betrachtet werden. Auf dieser Service-Ebene können wir Geschäftslogik hinzufügen und sogar ein Rückgabeobjekt erstellen, das genau darauf abgestimmt ist, was von der Ansicht gerendert werden muss.
quelle