Frage

Okay, so entwerfe ich einen eigenständigen Web-Service (mit Restlet als meinen Framework). Meine Anwendung ist unterteilt in 3 Schichten:

  • Data Layer (nur die Datenbank oben, stellt APIs für den Anschluss an / Abfrage-Datenbank und ein Datenbankobjekt)
  • Objekt-Ebene (verantwortlich für die Serialisierung von der Datenschicht ... liefert Objekte, die die Client-Schicht, ohne sich Gedanken über die Datenbank verwenden können)
  • Client-Schicht (Diese Schicht ist der Restlet Web-Service ... im Grunde nur Objekte aus der Objektschicht erzeugt und erfüllt webservice Anfrage)

Nun, für jedes Objekt, das ich in der Objektebene erstellen, mag ich verschiedene Anmeldeinformationen verwenden (so kann ich jedes Objekt Sandbox ...). Die Objektschicht soll nicht wissen, die genaue Anmeldeinformationen (IE die Login / pw / DB-URL usw.).

Was wäre der beste Weg, dies zu verwalten? Ich denke, dass ich ein Super-Klasse-Datenbankobjekt in meiner Datenschicht haben sollte ... und jede Unterklasse wird die erforderlichen Login-Daten ... auf diese Weise meiner Objektschicht gehen kann nur Database db = new SubDatabase(); enthält und dann diese Datenbank weiterverwenden.

Auf der Client-Ebene, würden sie nur in der Lage sein ItemCollection items = new ItemCollection(); zu gehen und haben keine Ahnung / Kontrolle über die Datenbank, die verbunden wird.

Ich frage das, weil ich versuche, meine Plattform erweiterbar zu machen, so dass andere leicht Dienste von meiner Plattform erstellen können.

Wenn jemand keine Erfahrung mit diesen architektonischen Problemen oder, wie diese Art der Sache verwalten ich keine Einsicht oder Ratschläge zu schätzen wissen würde ...

Fühlen Sie sich frei, Fragen zu stellen, wenn dies verwirrend ist. Dank!

Meine Plattform ist Java, der REST-Framework Ich verwende ist Restlet, meine Datenbank MySQL.

War es hilfreich?

Lösung

ich fühle, was Sie erklärte sinnvoll ist, und Sie versuchen nicht, die Datenbankdetails und Anmeldeinformationen an die cleint Ebene zu belichten.

Für diese Situation müssen Sie über alle Design-Muster denken, die Ihnen helfen könnte Ich kann der Singletonmuster denken, wo Sie eine Instanz erstellen und es in der Objekt-Ebene verwenden, wodurch vermieden wird keine Details zeigt, über die credentails und URL für die Nutzer.

Zweite Option, was ich in meinem Kopf ist die Verwendung der Hibernate-Schicht, die Ihnen helfen, um die Details zu verstecken und Zugriff nur die ORM-Objekte und Sie können bekommen, was Sie suchen.

Andere Tipps

Mein Vorschlag ist, JTA zu verwenden, wo Sie mehr als eine Datenbank mit entsprechender Anzahl von Datenquellen nutzen können. Sie können hier für weitere Informationen siehe https: //test.kuali .org / Einmündung / Anzeige / KULRICE / Datenquelle + und + JTA + Konfiguration

Ich würde @ saugata Kommentare Echo. Schauen Sie sich Frühling und Ihre Daten-Source-Implementierung injizieren (oder Stubs zum Testen!), Um Ihre Objektschicht in Ihrem Frühling Aufbau. Dies sollte Ihre gesamte Anwendungsarchitektur in einer Reihe von Möglichkeiten helfen:

  1. Sie werden in der Lage Datenbanken zu wechseln (entweder Instanzen oder Implementierungen) on the fly ohne Code neu kompilieren.
  2. Sie über abstrakt die Datenquelle vollständig von ihm Implementierung ist -. So dass Sie eine Datenbank für einen Web-Service, Warteschlange Implementierung oder einen Stub tauschen
  3. Entkoppelung Ihre Anwendung auf diese Weise wird es leichter zu testen.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top