2017-03-14 3 views
1

Nur eine kurze Frage. Welche Typen sollte die DAL in einer mehrstufigen Architekturumgebung mit einer Business-Logik-Schicht (BLL) und einer Datenzugriffsebene (DAL) an die BLL weitergeben?Typen die DAL und BLL sollte passieren

Derzeit produzieren unsere DAL-Klassen DataTables- und SQlDataReader-Objekte (unter anderem allgemeine Datentypen). Sollte die Umwandlung der Objekte in unsere benutzerdefinierten Typen in der DAL erfolgen, bevor sie an die BLL übergeben wird, oder sollte die DAL den ursprünglichen Typ passieren und die BLL die Konvertierung durchführen?

Ich versuche, an ein Szenario zu denken, wo die DAL Schicht für eine andere Technologie in der Zukunft ersetzt werden könnte. In diesem Szenario hört es sich so an, als ob die BLL den konvertierten Datentyp erwarten sollte, so dass wir bei einem Wechsel nur sicherstellen müssen, dass unsere Objekte zurückgegeben werden.

Jede Klarheit hierüber oder das Lesen von Materialien, um Dinge zu klären, wäre hilfreich!

TIA

+0

Es ist eine Frage der Meinung, aber ich denke, wenn Sie eine andere Baugruppe haben (* .Models oder etwas, das nur Ihre Modelldefinitionen enthält), dann sollte Ihre DAL die Daten sammeln und das Modell an die BLL zurückgeben. Offensichtlich würden sowohl die DAL als auch die BLL auf die Baugruppe * .Models verweisen – maccettura

Antwort

1

Zwar gibt es Richtlinien gibt, gibt es keine jede feste Regel dafür. Außerdem können sich die Richtlinien je nach Projekt ändern, basierend auf Architektur, Größe, Anforderungen, Prioritäten, verwendetem ORM usw. Siehe this.

Wie gesagt, es gibt nichts Definitives, das Folgende ist was ich in meinem großen Projekt tue.

Ich verwende den NHibernate ORM. Meine DAL gibt Entity zurück. Meine BLL empfängt Entität und konvertiert sie in DTO. DTO wird dann an die Anwendungsebene übergeben. Dies gilt auch nicht für alle Fälle. Siehe this Post. Ich habe Details erwähnt, warum ich das in dieser Antwort mache.

Für meine kleinen Projekte verwende ich Dapper ORM. In diesem Fall gibt mein DAL Entity zurück. BLL empfängt die Entität und gibt sie an die Anwendung weiter. Da Dapper keine Proxys erstellt, konvertiere ich Entitäten nicht in DTOs.

Es sieht aus, dass Sie kein ORM verwenden. Der zweite Weg (Übertragung der Entity zu BLL und derselbe zur Anwendung) könnte für Sie der bessere Ansatz sein. Aber Sie sollten auch andere Aspekte berücksichtigen, die ich oben erwähnt habe.

In jedem oben erwähnten Fall sollte DAL das transformierte Objekt (wie Entity/POCO) anstelle des ADO.NET-Objekts zurückgeben. Auf diese Weise wird jeder Technologie-Switch in Zukunft nur Änderungen in DAL benötigen, solange Ihre Schnittstellen nicht unterbrochen sind.

Die Übertragung von ADO.NET-Objekten (DataTable, DataReader) bindet Ihr DAL und das gesamte Projekt an eine Technologie. Es wird schwierig sein, die Technologie zu wechseln. Auf der anderen Seite, wenn Ihre DAL Entity (plain C# class) zurückgibt, können Sie die Technologie in DAL wechseln und Ihre Anwendung bleibt davon unberührt. Was in BLL zu tun ist, hängt von anderen Überlegungen ab.

Sollte die Umwandlung der Objekte in unseren benutzerdefinierten Typen in der DAL getan werden, bevor mit dem BLL Bestehen der ursprüngliche Art der DAL passieren oder sollte und der BLL führt die Konvertierung?

Die Konvertierung von Objekten sollte bei DAL passieren. Konvertiertes Objekt sollte an BLL übergeben werden.