2009-06-10 4 views
8

Martin Fowler suggests Verwenden einer Dienstschicht als Grenze zwischen dem Domänenmodell und "Data Loaders". Rockford Lhotka schlägt jedoch eine Gebäudevalidierung in das Geschäftsobjekt selbst vor, und genau das macht CSLA.NET.Validierung und in Service-Schicht oder Business-Objekte?

Die Vorteile einer Abstraktion in eine Serviceebene bestehen darin, dass Ihre Serviceebene die Aktivität/Operation über mehrere Geschäftsobjekte hinweg koordinieren kann. Welche anderen Vor- und Nachteile hat die Verwendung einer Service-Schicht gegenüber der direkten Verwendung von Geschäftsobjekten für Geschäftslogik und Validierung?

Antwort

3

Ich bin definitiv im Lager von Rocky Lhotka. Ich glaube, dass Ihre Geschäftsobjekte sehr einfach zwischen Anwendungen und UI-Ebenen "portieren" sollten. Das Hinzufügen einer zusätzlichen "Service-Schicht" wird höchstwahrscheinlich eine Abhängigkeit mit Ihren Objekten hinzufügen und sie daher weniger "portabel" machen.

Wenn Sie Ihr Business-Objekt-Framework korrekt schreiben, sollten Ihre Business-Objekte in der Lage sein, die Überprüfung zwischen verschiedenen Business-Objekten korrekt durchzuführen. CSLA.NET macht dies korrekt, indem es Eltern/Kind-Beziehungen sowie das Konzept der abhängigen Eigenschaft validtion hat.

+0

Ich würde auch hinzufügen, dass einige Business-Objekte vorhanden sein können, um die Koordination zu tun. Zum Beispiel würden Sie nicht die Verhaltensweisen schreiben, die benötigt werden, um eine Bestellung in eine Rechnung zu konvertieren, Sie hätten einen OrderConverter, der eine Bestellung prüft und sie gegebenenfalls konvertiert. Was ich normalerweise als "Service" -Objekte betrachte, ist im Grunde genommen eine Müllhalde von kaum verwandten Methoden. Sie alle tun etwas in einem Geschäft, aber anders als das sind nicht verwandt. In Csla würden diese Methoden typischerweise in separate Klassen eingekapselt werden, die volle Kenntnis des Anwendungsfalles haben, das heißt, sie weiß alles darüber, wie eine Bestellung zu einer Rechnung gemacht werden kann – Andy

4

Ich bin mir nicht sicher, ob Sie das herausgefunden haben.

Martin Fowler Vorschlag in der PEAA ist die Service-Schicht eine API zwischen der UI (oder Clients) und der Domain/Daten-Layer. Es wird jegliche Funktionalität offen legen, die von einem Client verbraucht werden kann.

Wenn Sie das Domain Model zu buchen (Here)

Ein Objektmodell der Domäne, die sowohl das Verhalten und Daten enthält.

wird die Domain-Tier diese Objekte enthalten, die Aktionen/Validierung (Verhalten) und Zustand (Data)

Diese Objekte können in anderen Anwendungen wiederverwendet werden, dies hängt auch von Ihrem Design haben wird. der Domänen-Layer sollte nicht von der Service-Schicht abhängig sein

Also unter Berücksichtigung der Tatsache, dass Domain-Objekte Verhalten (einschließlich Validierung) und Daten haben. Die Serviceschicht ist das, was Ihre Anwendung bereitstellen soll (um dies zu tun). IE einen Kunden hinzufügen, oder Konto, berechnen die Rechnungen für das Ende des Monats.

einen Blick auf scharfe architure Layout haben (http://www.sharparchitecture.net/)

Das ist mein Verständnis dieser meterial.

HTH

Knochen

0

Ich bin auf der Suche nach einem flexibleren Domänenmodell, wo es eine Trennung von Daten und Verhalten, aber ich glaube nicht, der Service Layer die entsprechende Schicht für das Verhalten ist . Stattdessen könnte man einen einfachen Business-Logik-Layer-Ansatz wählen, bei dem Business-Entity-Objekte nur Daten offenlegen und Business-Process-Objekte nur das Verhalten offen legen, und zu diesen Verhaltensweisen gehören Validierungsmethoden.

Ein Vorteil, abhängig davon, wie locker die Kopplung von Geschäftsprozessen ist, besteht darin, dass Sie die Validierung auf eine größere Bandbreite von Covarianten und möglicherweise sogar Invarianten anwenden können.Betrachten Sie einen Augenblick lang die Felder "FirstName" und "LastName" und denken Sie darüber hinaus, dass diese Felder in jedem großen System in einem halben Dutzend oder mehr verschiedenen Entitäten vorhanden sein können. Wenn Sie den Prozess von den Daten trennen, können Sie sicherstellen, dass Sie Ihre Validierungsprozesse einmal implementieren und auf viele Objekte anwenden können, die dieselben Daten bereitstellen.

Ich habe festgestellt, dass das Ideal, dass das Domänenmodell Domänenobjekte sein sollte, die eine Fusion von Daten und Verhalten sind, ein Konzept von Fowler/Evans, circa 2000-2002 (kurz nach einer schnellen Migration) hin zu verteilten Informationssystemen anstelle von 2-Tier-Anwendungen.)

Gedanken?