2016-03-19 13 views
0

Ich bin neu auf der Verwendung von DAO in j2EE. Ich bin ein wenig verwirrt darüber, dies zu implementieren, da ich sah, dass es bereits eine konkrete Klasse gibt, aber wir verwenden eine Schnittstelle. Kann mir jemand im Detail erklären, warum Interfaces direkt anstelle von konkreten Klassen verwendet werden?Datenzugriff Objekt Anwendung

+0

Im Allgemeinen, wenn es auch die Option Schnittstelle eine konkrete Implementierung einer Schnittstelle ist, dann gibt es Möglichkeiten in Ihrem Design (es gibt auch andere ähnliche Optionen in Java). Mit Java wissen wir, dass wir nur eine einzige Klasse erweitern können. Daher ist die Schnittstelle möglicherweise die einzige Option, die auf anderen Designoptionen basiert. – ChiefTwoPencils

Antwort

0

Das Datenzugriffsobjekt ist nur ein Teil eines Musters, eine Abstraktion über dem vorhandenen Datenspeicher. Da sich die Details des Datenspeichers möglicherweise von Zeit zu Zeit ändern (von MsSQL zu MySQL oder Oracle oder zu NoSQL-Speichern), ist es ratsam, den Daten eine API zur Verfügung zu stellen, daher die Verwendung der Schnittstelle in Java.

"Der Zugriff auf Daten hängt von der Quelle der Daten ab. Der Zugriff auf den persistenten Speicher, z. B. auf eine Datenbank, ist je nach Art des Speichers sehr unterschiedlich (relationale Datenbanken, objektorientierte Datenbanken, flache Dateien usw.) weiter) und die Implementierung des Anbieters. "

Da die Clients nur die öffentliche API der Daten über die Schnittstelle sehen, kann die Implementierung dahinter ohne Folgen geändert werden (unter der Annahme, dass diese Änderungen dem durch die API festgelegten Vertrag entsprechen).

"Verwenden Sie ein Data Access Object (DAO), um alle Zugriffe auf die Datenquelle zu abstrahieren und zu kapseln. Das DAO verwaltet die Verbindung mit der Datenquelle, um Daten zu erhalten und zu speichern."

Wenn der Client eine konkrete DAO-Klasse anstelle von DAO-Schnittstellen verwenden würde, sollte der Client bei jeder Änderung und Neukompilierung der DAO-Klasse ebenfalls neu kompiliert werden. In vielen Fällen ist dies unerwünscht, da Sie Ihre Anwendung nicht stoppen möchten und/oder keine Kontrolle über den Client haben.

Auf der anderen Seite, wenn die DAO-Schnittstelle die gleiche bleibt, können die Klassen, die diese Schnittstelle implementieren, mit einem viel größeren Freiheitsgrad geändert/ersetzt werden.

Beachten Sie, dass die DAO-Schnittstelle nur ein Teilnehmer an einem Entwurfsmuster ist. Sie müssen besser verstehen, wie DAOs in Ihre Architektur passen/nicht passen. Möglicherweise möchten Sie den Datenzugriff auf Grundlage Ihrer Anforderungen anders organisieren.

Eine Alternative könnte die Verwendung aktiver Datensätze oder Data Mapper usw. sein. Aber es gibt wirklich viele verschiedene Möglichkeiten.

Quelle: http://www.oracle.com/technetwork/java/dataaccessobject-138824.html

Quelle: http://martinfowler.com/eaaCatalog/

Verwandte Themen