Frage

Ich bin ein C # Entwicklung neuer Anwendungen

  • Präsentation (Web site + flex-Anwendungen)
  • Handel Logical Layer (möglicherweise WCF Multi-Client-Plattformen zu ermöglichen)
  • Data Access Layer (Mit NHibernate)

Wir werden unsere Lösung in vielen preexistant Kunden Datenbank Environnements integrieren und wir möchten NHibernate in der DAL verwenden .. Mein Kollege wies darauf hin, dass die Erzeugungs Klassen von Kunden DB (wie Benutzer oder Image) mit NHibernate das würde dazu führen, BLL blasen an jeder DB Veränderungen in unserem Gesicht! Die Frage ist also, wie verhindern wir, dass nicht passiert? Wir denken über Business-Objekte erstellen und zuordnen NHibernate diese BO-Objekte zu (Brummen, Macht das sie DTOs?) Mit AutoMapper und verhindern dal Änderungen von BLL beeinflussen .. Ist dies der Weg zu gehen?

Danke!

EDIT:

Um ein besseres Verständnis von dem, was wir versuchen, erreichen Sie Kontext benötigen: Wir bauen ein Foto Speicher / Sharing-Anwendung in Flex für das Front-End und C # auf dem Back-End in erster Linie für unser Unternehmen, so dass wir alle Aspekte des Codes und DB behandeln.

Aber : das Produkt auch durch Reihen gekauft werden kann, die schließlich haben bereits eine Datenbank mit Benutzertabelle oder Bild-Tabelle. Ich denke hier um eine neue Perspektive, die ein Bild Tabelle mit einem paar hundert Millionen von Zeilen und Hinzufügen von Spalten für unsere Business-Logik hat, ist nicht wegen eines zu lange zu verändern der Tabelle geschieht gehen werden.

Auch wenn es möglich wäre (User-Tabelle kann zum Beispiel wegen geringerer Zeilen geändert werden), sind wir sie fragen, wie Tabellenstruktur Änderungen zu handhaben, ohne alle unserer Lösung jedes Mal zu beeinflussen wir in einer Tier-Datenbank zu integrieren haben von BLL nach Client-Anwendung in Flex!

War es hilfreich?

Lösung

in meiner Erfahrung, Ihre Business-Objekte (AKA Domain Objects) sollten in OO modelliert werden Ihre Lebensgeschäftseinheiten und Ihre Tabellen in der 3. Normalform darzustellen (diese Änderung auf kann je nachdem, was Sie entwerfen nach Geschwindigkeit vs Dateigröße sind)

NHibernate zwischen BO und Tabellen abbilden sollte, seine Mapping-Dateien verwendet wird.

Jetzt haben Sie legitime Fälle:

  • Sie müssen eine Spalte hinzufügen / entfernen, wir addressline4 entfernen entschieden, dies wird eine Veränderung in Ihrem Adressobjekt Echo, das ist in Ordnung.
  • Sie bewegen, um eine Spalte zu einem besseren Ort, unsere Client-Objekt enthält Hinweise, die zur Zeit in der Contract_Extra Tabelle gespeichert ist, die in der Client-Tabelle werden wird bewegt. die Säule in einen besseren Ort zu bewegen nur die Mapping-Datei auszuführen, in diesem Fall

Ich bezweifle, gibt es eine Decke Argumentation, aber ich hoffe, die Beispiele denken Sie über dieses

Ich habe nicht versucht NH accross mehrere DBs, auch sollte jede Datenbank hat einen eigenen Service auf ?

Hier sind einige Links

Hope, das hilft

Andere Tipps

Es klingt wie Sie Ihren Domain-Modell entwerfen wollen Datenbank Agnostiker sein. Ich bin auch daran interessiert, den besten Ansatz ein zentrales Domänenmodell zu haben, die auf mehrere verschiedenen Datenbankmodelle abbilden über können.

Die Art und Weise Sie vorschlagen, zu schaffen DTO aus jeder Datenbank-Code-Generatoren verwendet wird, könnte eine Option sein. Eine andere Möglichkeit wäre benutzerdefinierte NHibernate Zuordnungen für jede bereits existierende Datenbank erstellen sein. Sie müssen noch können einige DTOs verwenden, um einige der Abbildungen weniger schwierig zu machen, aber es kann Ihnen mehr Kontrolle geben.

Dies sind nur einige Gedanken. Erfahrene Anwender mit NHibernate wird wahrscheinlich einen besseren Einblick in Ihre Situation haben.

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