Frage

Wie übergeben Sie die Daten zu den Schichten in einer n-Tier-Anwendung? Ich habe 3 verschiedene Methoden vorgezeichnet.

A) generic .NET-Objekte generische Datentabellen, Hashtables, generische Datensätze, Strings, Ints etc ... indem dann die Datensätze Ihrer Business-Objekte zu füllen, die an die UI-Ebene gesendete.

alt text http://img11.imageshack.us/img11/460/generic. png

http://dabbleboard.com/draw?b=eiu165&i=26&c=54eef6f1ac01f03c85919518f4a24e798e57e133

Pro - Keine zusätzlichen Schichten erforderlich Con - habe mit generischem Datensätze und Tabellen in der Business-Schicht arbeiten

B) Verwendung einer Einheit-Schicht, die die anderen Schichten verweisen würden. Diese Schicht würde entweder stark typisierte Datasets oder Plain Old C Objekte enthalten. Die Objekte würden meist Datencontainer und sehr wenig Logik. diese würden die gleichen Objekte an die UI-Ebene gesendet werden.

alt text http://img8.imageshack.us/img8/6454/entities. png

http://dabbleboard.com/draw?b=eiu165&i=6&c=d0c2b346894a96b12bd3867f630e474a2af098fa

Pro - die Arbeit mit den gleichen Klassen in allen Schichten Con - eine Referenz Zugabe auf alle Ebenen entities.dll

C) verwenden Datenübertragungsobjekte (conatiner Objekte nur) in der Data Access Schicht definiert. dann diese Objekte mit Business-Objekten zu füllen, die an die UI-Ebene gesendete.

alt text http://img43.imageshack.us/img43/1236/transferp. png

http://dabbleboard.com/draw?b=eiu165&i=27&c=f886efa3f9d5eb4b45ddb02361c79cdcdaec0a9b

Pro - die Business-Schicht würde nicht mit generischen Klassen arbeiten Con - mit zwei Arten von Objekten zu arbeiten und Sie würden die Geschäftsobjekte mit den Transferobjekten Hydrat haben

Wir hatten eine Diskussion bei der Arbeit und wollten sehen, was die Gemeinschaft gedacht. Ich habe auch einen Link zu dem Dabbleboard. bitte kopieren und statt Bearbeitung erstellen.
Dank

War es hilfreich?

Lösung

Wenn Sie mit einem geschichteten Ansatz, dh alle Schichten (im Wesentlichen) in demselben Prozessbereich ausgeführt wird, und es gibt daher keine Rangierung / Serialisierung, würde ich mit Ansatz B. gehen erstellen ein separates Modul für Ihre Entitäten, auf das alle Aspekte Ihres Programms ab und Paar das.

Wenn aber Sie verwenden ein tiered Ansatz als Titel vermuten lässt, dh es werden Verfahren und / oder Netzwerkgrenzen, die gekreuzt werden, würde ich vorschlagen, dass Sie mit Ansatz C. gehen Sie sind nicht wirklich Instanzen um vorbei, vorbei sind Sie Kopien, so dass alle Vorteile, die Sie auf das gleiche Objekt erhalten koppeln, wie beobachtbare Optionen für, sagen wir, einer MVC-Ansatz, verloren trotzdem. Bessere Daten-APIs auf jeder Ebene Ebene zu definieren, als zu versuchen, die gleiche Klasse zu verwenden, um alle um.

Andere Tipps

Gute Frage -. Wie immer, die Antwort muss sein, „es kommt“

Auf der Art der Anwendung, und ob es wirklich eine Notwendigkeit Business-Objekte (Entities) zu haben, im Gegensatz Objekte zu übertragen (dh abgespeckte Business-Objekte, die mehr Datenbankentität entsprechen).

Traditionell würde ich argumentieren, dass Sie immer einen Bedarf an generischen Datensatz (oder Datentabellen) haben, rein aus Leistungsgründen. Immer dann, wenn es notwendig ist, mit, Anzeige zu arbeiten, oder zu manipulieren, größere Mengen, die traditionelle strenge OO Art und Weise eine große Anzahl von Business-Objekten instanziieren fehlgeschlagen.

Da ich aber mit Linq to SQL zu arbeiten begann, habe meine Paradigmen verändert. Es gibt keine Notwendigkeit mehr für diese überhaupt, da die Linq Modell alles sein kann - Business-Objekte, Transferobjekte und generische Datensätzen. Ich habe noch nicht erforscht, wie gut das in wirklich großen Anwendungen funktioniert, und ob es eine Notwendigkeit sein, um Front-End-Code aus dem Linq Modell zu isolieren. Ich habe Diskussionen darüber mit Kollegen hatte, ohne wirklich eine Antwort so oder so zu finden.

Ich mag Option C, aber es gibt mir auch aus zwei Gründen pausieren:

  1. Ich habe die knwowledge von verbreiten, was die properites sind an zu vielen Orten.
  2. DTO müssen serialisierbar sein, was nicht so schlimm ist, aber immer noch eine Überlegung.

ich alle drei Schichten gehe davon existiert innerhalb der gleichen App. In Java atleast habe ich Hibernate für den Datenzugriff verwendet, und verwendet diese Daten Bohnen in allen Schichten. (Option B) Es ist sinnvoll, können Sie Ihre Einheiten in Ihren Schichten wieder zu verwenden.

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