Frage

Ich arbeite auf dem JBJF Projekt auf Source und wir wollen auf dem Datenbankzugriff für diesen Rahmen verbessern. Derzeit ist es halb-flexibel, aber der Zugriff auf den Task-Ebene.

Wir möchten eine einfache Schnittstelle irgendeiner Art zu gründen, die in der Natur generic ist und kann den Zugriff auf die Datenbank Host zu / von JBJF. So Framework-Klassen kümmern sich nicht, welche Art von Datenbank, nennen sie nur eine Methode, wie getConnection () und ein java.sql.Connection Objekt kommt zurück.

Ich frage mich, was wäre besser geeignet, eine typische DAO Schicht mit einer einzigen Schnittstelle oder einer Plugin-Typ-Struktur, wo wir den Datenbankdienst in einer XML-Datei und der Rahmen konfigurieren lädt das Plugin (s), wenn er startet.

tia,

adym

War es hilfreich?

Lösung

Ich beginne zu glauben, dass Hibernate zu groß und aufgebläht bekommen hatte, aber ich habe an einem Projekt vor kurzem arbeitete die neueste Version 3.5 verwenden und JPA verwenden und sie haben es auf jeden Fall abgespeckt und machte es viel besser als einige die anderen 3.x Versionen. Ich würde empfehlen, JPA mit Hibernate: -)

Einer der großen Vorteile von diesem Ansatz ist, wie gut Hibernate ist mit mehreren verschiedenen Datenbank-Dialekte zu tun haben. Unsere App läuft auf MySQL, H2 und SQLServer ohne Modifikationen (und wahrscheinlich auch auf den anderen großen Datenbanken nur laufen würde auch).

Andere Tipps

Wie wäre es abstrakt alles weg und verwenden JPA

Es ist schwer zu sagen, ohne die Details zu kennen, aber im Allgemeinen würde ich nicht mein eigenes Framework schreiben und stattdessen verwenden Hibernate oder ein ähnliches ORM-Tool. Es wird bereits XML für die Zuordnung von Objekten zu Tabellen definiert und zurück kann einfach ausgetauscht werden, in verschiedenen Datenbankimplementierungen / out, und ist in der Regel ein großes Werkzeug für diese Art der Sache zu tun.

Die beiden Optionen Liste schließen sich nicht aus; Sie können eine DAO / Repository-Schicht, die Sie über irgendeine Schnittstelle / API zugreifen, während die konkreten Implementierungen zur Laufzeit injiziert werden Ihre Abhängigkeiten zu erfüllen.

Zum Beispiel, schreiben Sie eine WidgetRepository Schnittstelle, die das Widget Teil Ihres Datenzugriffs-API definiert. Sie können dann eine FileSystemWidgetRepository HibernateWidgetRepository XmlWidgetRepository JpaWidgetRepository , usw. bereitzustellen, die Ihre Schnittstelle implementiert.

Die allgemeine Regel wäre eine so hohe Abstraktionsniveau zu verwenden, wie Sie können, während immer noch Ihre Anforderungen zu erfüllen. In der Beispielliste gab ich einen JPA-basierten Repository würde das höchste Niveau sein, weil es auch den ORM-Framework abstrahiert.

Sie können dann halten eine WidgetRepository Referenz in Ihren Objekten, die davon Gebrauch machen. Code nur an dieser Schnittstelle. Als nächstes wurde eine Dependency Injection in Kraft gesetzt Rahmen wie Frühling , die eine konkrete WidgetRepository Implementierung zur Laufzeit wird injizieren basierend auf einigen XML-Konfigurations oder auto-Verdrahtung Mechanismus.

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