Frage

Ich habe eine Frage in Bezug auf n-Schicht-Architektur. Ich dachte lange und hart, bevor diese Frage, da es viele ähnliche Fragen ist hier schon ... aber nach buchstäblich einen Tag und eine Hälfte es zu betrachten und lesen diese Antworten, die ich bin immer noch nicht sicher. Die Vielfalt der scheinbar ähnliche Terminologie und unterschiedliche Ansätze hat mich verwirrt.

Wenn ich eine BLL und DAL in verschiedenen Klassenbibliotheken hatten, einen Weg zwischen dem BLL und DAL zu kommunizieren wäre eine Schnittstelle zu nutzen, ein bisschen wie ein DTO definiert in einem anderen separaten DLL, die sowohl von BLL und DAL verwiesen wurde . Meine Domain-Modell Entitäten in der BLL würden diese Schnittstelle implementieren und würden so alle ORM generierten Objekte in der DAL. Zu meinen Geschäftseinheiten speichern kann ich gebe ihnen dann an die DAL, die sie in Ordnung akzeptieren würden, weil sie die gemeinsame Schnittstelle implementieren. Ich könnte auch Objekte an der BLL zurück, dass diese Schnittstelle implementieren passieren. Dies scheint vernünftig, da beide BLL und DAL dann nur Kenntnis von dem Grunde Schnittstelle sein mußten, nicht jede andere konkrete Umsetzung.

Meine Frage ist, was ist das, was die beste Methode ist auf der anderen Seite das Objekt für das Erstellen? Zum Beispiel, wenn ich hatte eine Person Objekt in der BLL, die IPerson und ein PersonDataObject oder was auch immer in der DLL implementiert, dass auch implementiert IPerson, ich Person ein Verfahren in der DAL übergeben, die einen Parameter von IPerson nimmt, dann in der DAL I‘ d haben einen PersonDataObject zu rekonstruieren zu beharren. Ist dies auch die beste Methode?

Leider habe ich wahrscheinlich erklärt habe das nicht allzu gut, wie ich ziemlich verwirrt bin. Eine bewährte Methode für Dummies Antwort würde sehr geschätzt werden.

War es hilfreich?

Lösung

Im Allgemeinen in der BLL-Objekten werden die Schnittstellen verbrauchen - sie nicht implementieren:

  

Zum Beispiel, wenn ich habe eine Person Objekt   in der BLL, die IPerson umgesetzt,   und ein PersonDataObject oder was auch immer in   Die DLL, die auch Geräte IPerson

eine „Person“, wie am Beispiel: Man denke über die verschiedenen Datenoperationen mit einer Person verbunden ist (immer alle Daten für eine einzelne Person, eine Sammlung von flachen Daten für viele Personen, CRUD-Operationen, Suche, etc.) - dann Design-Schnittstellen entlang logische Gruppierungen (siehe Schnittstelle Segeragtion Prinzip ).

Die Schnittstellen-Operationen von einem BL zentrierte Perspektive darstellen könnte -. Oder ein „Service“ auf der Grundlage eines

Wie auch immer, auf Ihre Frage zu beantworten ...

definiere ich meine Äquivalent von DTO in einer gemeinsamen Versammlung und die Datenschnittstelle in einem separaten als auch - so habe ich 4 Baugruppen: BL, Data Access Inteface Definition der Schnittstellen-Implementierung und Common; alle Baugruppen verweisen auf die gemeinsame ein.

Ich arbeite in C # .Net, definiere ich die DTOs als structs (aber man konnte Klassen verwenden); und alle Eigenschaften von diesen sind nur lesbar - Sie füttern Daten in sie im Konstruktor -. Auf diese Weise die DTO sind effectly ‚stummen‘ Umschläge von Informationen

Andere Tipps

Während nach der n-Tier-Architektur, es ist sehr üblich, die Datenobjekte zwischen BL und DAL zu teilen. Manchmal kann das gleiche Datenobjekt in der UI-Ebene als auch verwendet werden.

In der Regel habe ich ein Datenmodell (oder Datenobjekte oder Domänenmodell, was auch immer Sie es nennen) Montage, dass alle Häuser Modell als Schnittstellen-Objekte. Unter deinem Volk Beispiel werde ich Anordnung eine iPeople Schnittstelle in Modell erstellen. DAL wird eine Instanz von iPeople zu BL zurückzukehren. BL wird diese Instanz verbrauchen und wenn dies erforderlich weitergeben an die UI-Ebene nach Business-Logik angewandt wird.

Google für Domain Driven Design und das Repository-Muster. Es soumnds wie Sie in diese Richtung mit Ihrer Architektur geleitet werden und abhängig, dass das Szenario garantiert es mir diesen Ansatz auf mehr komplizierten Code verwenden würde.

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