Frage

Wie ich im Titel erwähnen, ich bin daran interessiert zu wissen, was Sie (als erfahrene Entwickler) denken über die Verwendung des DAO-Musters, und zwar innerhalb einer Web-Anwendung. Welche Vorteile haben Sie gefunden, und welche Folgen ihrer Nutzung haben unbeliebt Sie?

War es hilfreich?

Lösung

Die Probleme mit DAOs, dass ich gesehen habe, ist, dass sie in der Regel voll Objekte die ganze Zeit behandeln. Dies schafft eine völlig unnötigen Aufwand, der nicht mit einfachen Abfragen existieren würde. Zum Beispiel wird, wenn ein Drop-Down-Datenbank-Referenzdaten erstellt ausgeschaltet werden, kann ein DAO Benutzer einfach sagen: „Geben Sie mir die Sammlung von Objekten für diese Tabelle, wobei y von z bestellt“. Dann werden, dass die Daten in der Dropdown-Liste verwendet wird, aber in der Regel nur für einen Schlüssel / Wert-Kombination, ignoriert alles anderes in den Objekten (erstellt Daten, letzten Benutzer, der es aktualisiert wird, ob es aktiv ist, usw.), die abgerufen wurden und kartiert . Auch wenn diese Massieren in der Nähe des Aufrufs DAO geschehen und die Objekte gespeichert werden nicht, wie sie abgerufen werden (die in der Regel nicht der Fall ist, leider werden die Objekte oft in ac eingewickelt: foreach (JSP) und iteriert ein Drop-Down zu produzieren ), schafft es noch nicht benötigte Datenbank und Netzwerk-Overhead nicht die vorübergehende Erhöhung der Speicher zu erwähnen, diese Objekte zu halten.

Nun, dies ist nicht zu sagen, dass ein DAO nicht ausgelegt werden, um eine Karte von Referenzdaten abrufen - es ist sicherlich kann. Aber in der Regel sind sie für das gesamte Objekt-Mapping verwendet, das ist nicht das, was die ganze Zeit benötigt wird. Es ist eine Stärke beim Speichern, sondern eine Schwäche, IMO, beim Abrufen von Daten - sicher, Sie alle davon bekommen -. Aber oft brauchen Sie nicht alles, und es nur Abfälle Speicher, Bandbreite und Zeit

Andere Tipps

Hinweis: Sie können andere Mängel finden, aber hier ist eine kurze Liste von meiner Erfahrung

PROS:

  • Häufig ruft Objekte abzurufen.
  • Sobald Sie die allgemeinen haben erstellen / lesen / update / delete Strommenge kann das allgemeine Layout für andere DAOs wiederholt werden.
  • Es festigt auch, wo die Persistenz bestimmten Teil des Codes gehen kann. Trennt die Geschäftslogik von anderen Komponenten des Codes.

CONTRA:

  • Es ist nicht die flexibelste Sache überhaupt.
  • Wenn Sie einige untergeordnete Objekte zu faul Last wollen, dann werden Sie entweder intermingle die DAOs mit anderen Schichten zu haben oder Vorsichtsmaßnahmen zu ergreifen, wenn Sie versuchen, die faul Objekte abzurufen.
  • Wenn Sie die DAOs handschriftlich, dann kann der Code mühsam und langweilig werden.

Vorteile der Verwendung von DAO-Entwurfsmuster

DAO oder Data Access Object Design-Muster ist ein gutes Beispiel für Abstraktion und Kapselung objektorientierter Prinzipien. Er trennt Persistenzlogik eine separate Schicht Zugriff Datenschicht bezeichnet, die Anwendung sicher Änderung Persistenzmechanismus zu reagieren. Zum Beispiel, wenn Sie von dateibasierten Persistenzmechanismus zur Datenbank verschieben, wird Ihre Änderung auf Datenzugriffsschicht begrenzt und wird nicht Service-Schicht oder Domäne Objekte auswirken. Data Access Object oder DAO-Muster ist ziemlich Standard in Java-Anwendung ist es Kern Java, Web-Anwendung oder Unternehmensanwendung. Im Folgenden sind einige weitere Vorteile in Java-Anwendung DAO Muster mit:

 image description hier

eingeben
  1. DAO-Entwurfsmuster hält auch zwischen verschiedenen Teilen einer Anwendung Kopplung gering. Durch die Verwendung von DAO-Entwurfsmustern Ihrer View-Schicht ist völlig unabhängig von DAO Schicht und nur Service-Schicht hat die Abhängigkeit von ihm, die auch unter Verwendung von DAO-Schnittstelle abstrahiert wird.

  2. DAO-Entwurfsmuster ermöglicht JUnit-Test schneller zu laufen, wie es Mock und vermeiden Sie erstellen kann, um Datenbank zu laufen Tests zu verbinden. Es verbessert die Prüfung, weil es mit Mock-Objekten einfach zu Schreibtest ist, eher als ein Integrationstest mit der Datenbank. Im Falle, dass ein Thema, während Unit-Test ausgeführt wird, müssen Sie nur Code und nicht Datenbank zu überprüfen. Auch Schilde mit Datenbankanbindung und Umweltfragen.

  3. Da DAO-Muster auf Schnittstelle basiert, sondern fördert auch die objektorientierte Design-Prinzip „Programmierung für die Schnittstelle als Implementierung“, die Ergebnisse in flexible und Qualität Code.

Die Kräfte des DAO-Muster sind, dass sie ermöglichen es Ihnen, eine schöne Abstraktionsschicht des eigentlichen Speichersystem zu schaffen. Sie bieten eine objektorientierte Sicht auf die Persistenz-Schicht und eine saubere Trennung zwischen der Domäne und dem Code, der tatsächlich den Datenzugriff (straight JDBC, Persistenz-Frameworks, ORM oder sogar JPA) wird durch.

Wenn ich eine Schwäche zu zitieren hatte, na ja, ich würde sagen, es ist eine andere Schicht ... Aber ich denke, das ist der Preis zu zahlen ist, um Ihren Code nicht auf die zugrunde liegende Persistenz API zu binden.

Wir haben bei der Einführung eines DAO-Muster in unserer Implementierung einige echte Vorteil gesehen. Dies vor allem auf die klare Trennung zwischen Datenbank-Schnittstelle und Implementierung. Wir haben die folgenden Vorteile beobachtet:

  • Abstraktion für die eigentliche Datenbankzugriff Implementierung trennt die Datenzugriffsstrategie vom Benutzer Business-Logik. Dies hat uns erlaubt, eine kurzfristige (Frühjahr JDBC Template) Umsetzungsstrategie für die erste Projektphase mit der Option zu wählen, um iBatis oder Hibernate zu einem späteren Zeitpunkt zu verschieben. (Eine Auswahl sind wir nicht in der Lage, zu diesem Zeitpunkt zu machen.)
  • Die Trennung führt wesentliche Testbarkeit Vorteile, dass die gesamte Datenzugriff Implementierung in Unit-Tests verspottet werden kann. (Dies ist wahrscheinlich der größte Vorteil)
  • In Kombination mit Feder erlaubt uns, jede DB Implementierung in das System zu injizieren wir wählen (obwohl dies möglicherweise mehr über DI sagt als das DAO-Muster).

Ein Problem, das wir begegnet ist, und dies kann zu einem Mangel an Klarheit des Designs auf unserer Seite fällig ist die „Neigung“ den Datenwert wieder zu verwenden Objekte der Datenbank veröffentlicht, wie Übertragung zwischen den nachfolgenden Abstraktionsschichten in den Objekten die Architektur. Unsere Lösung nach einigem Schmerz war ein Wertobjekt pro Schicht haben (das heißt nicht, die Datenbank Wertobjekte in nachfolgenden Architekturschichten wieder zu verwenden).

PRO

  • Single Point of Definition für DB-Tabelle - Objektattributzuordnung
  • transparente Möglichkeit für DAO-Implementierungen auf andere Speichertypen
  • entwickeln eine Schnittstelle Muster folgen alle DAO
  • eine mehr oder weniger Standard-JUnit-Testklasse für DAO führt zu einer besseren Testabdeckung Entwicklung
  • die volle Kontrolle über Besonderheiten
  • kein Leistungsverlust aufgrund einer allzu allgemeinen Lösung

CON

  • weniger "sexy" als den neuesten Rahmen mit
  • Entwickler nicht bekommen, ihre eigenen Räder zu erfinden (könnte ein PRO sein: -))

Wie bei den meisten Entwicklungsmustern, nimmt mit DAO einige Zeit in Anspruch zu gewöhnen. Mit der Erfahrung kommt die Vorteile robusten Code und Entwickler, die wissen, warum die Dinge funktionieren, nicht nur, dass es zu sein scheint. Dieser letzte Punkt ist der größte Vorteil für mich.

Caveat, je nach Ihrer Situation einer Persistenz-Framework könnte eine gute Alternative sein, eigene DAOs zu Codierung.

Was Alternative erwägen Sie?

Es scheint ziemlich offensichtlich, dass die Verantwortung Platzierung für die Persistenz irgendwo anders als die Präsentationsschicht wird in der Regel gut sein, nur von Argumenten der Klarheit der Verantwortung und Wiederverwendung. Ich gehe instinktiv nach einem dreischichtigen Ansatz: Präsentation, Dienstleistung, Hartnäckigkeit. Bekennen zu haben, so lange es auf diese Weise getan, dass ich nicht aduce Hinweise auf Schmerzen, die durch nicht auf diese Weise tun gelitten können. Mir scheint es „offensichtlich“, dass eine einzelne Schicht, die die Persistenz-Mechanismus versteht müssen vereinfachen testen, einfache Wartung und eine gute Trennung von Bedenken geben.

, so dass Blätter der Frage, wie die Persistenz-Schicht zu tun. Meine Standardannahme wäre JPA zu verwenden (oder einem ähnlichen Rahmen). Ich sehe dies als ein anspruchsvolleres Beispiel von DAO.

Also habe ich zwei Kosten von DAO zu sehen. Zuerst müssen Sie in Ihrer Programmstruktur, das Design investieren. Für triviale Fälle kann dies übertrieben fühlen. Zweitens, wenn Sie einen Rahmen verwenden, die Geräte für Sie DAO gibt es eine Lernkurve. Im Vergleich zu nur den JDBC-Code zu schreiben direkt ist dies eine weitere Investition.

Pro:. Abstrakte Trennung
Con: Standardcode (Gott sei Dank für die Code-Generatoren / Vorlagen und ORM)

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top