Frage

Ich habe versucht, meinen Kopf herum zu wickeln, wie meine Domain-Objekte an den Client belichten. Ob ich einen Rich-Client bin mit oder ich bin mit dem Netz, mag ich die MVP und Repository-Muster verwenden.

Was ich versuche, meinen Kopf um zu wickeln ist, wie ich mein Repository und Modell aussetzen, die auf dem Server sein. Ist es überhaupt möglich, komplexe Business-Objekte zu machen, den Zustand über einen Web-Service haben, oder muß ich eine proprietäre Technologie verwenden, die nicht Sprache / plattformunabhängig, wie .NET Remoting ist, EJB, COM +, DCOM, etc?

Einige andere Einschränkungen sind, dass ich zu behalten haben will, um nicht das komplexe Domänenobjekt aus der Datenbank laden oder alles über den Draht vorbei jedes Mal, ich will eine Operation tun. Einige komplexe Logik könnte sein, dass bestimmte Bereiche des Bildschirms deaktiviert sein könnte oder unsichtbar auf der Grundlage der Benutzerberechtigungen in Verbindung mit dem Zustand des Objekts. Validierung und Fehlermeldung Informationen werden auch den Benutzer angezeigt werden müssen. Ich möchte logisch eine Menge meiner Domain-Objekt-Operationen in der Lage sein zu nennen, als ob es auf der gleichen Maschine ausgeführt wurden.

Mit dem Web, haben Sie freien Zugriff. Sie müssen nicht Ihre Objekte über Service-Grenzen aussetzen, so dass Sie sie ein reich machen, wie Sie möchten. Ich versuche, eine N-teir Architektur zu schaffen, die reich ist und arbeitet, wenn der Client ruft das Modell auf einer anderen Maschine ist.

War es hilfreich?

Lösung

Sie können Ihre Domain-Objekte wie jedes andere Objekt durch REST oder Web-Services aus. Ich denke, Schlüssel zu verstehen ist, dass Sie Dienste aussetzen müssen werden, die Wertschöpfung in einem einzigen Aufruf zur Verfügung stellen, und diese müssen nicht Karte 1: 1 auf Ihre Repositories. So, während Sie auf dem Server ein einzelner Service-Aufruf erwarten können mehrere Repositories und führt verschiedene Aggregationen zu verwenden, setzen die Dinge, die Sie jede Art von Web-Service über sollten mehr oder weniger vollständige Ergebnisse sein. Die Operationen, die Sie auf den Dienst aussetzen sollte nicht einzelne Repositories aussetzen, sondern konzentriert sich auf sinnvolle Operationen, die einen bestimmten Mehrwert bieten.

Ich hoffe, das hilft ein wenig.

Andere Tipps

Sie können eine SOAP formater für .NET Remoting verwenden, aber der daraus resultierende Service wird wahrscheinlich schwierig sein, zu verbrauchen als Dienst, und es wird unwirsch sehr gesprächig sein.

Wenn Sie Ihr Domain-Modell wollen als Dienstleistung verbraucht wird, soll es als Dienst ausgeführt werden.

Wie in Domain-Driven Design angegeben ist, ist ein Service, staatenlos, so dass es nicht Ihre Objekte direkt aussetzen wird. Ihr Dienst sollte Methoden aussetzen, die sinnvollen Geschäftsbetrieb bereitstellt, die als eine einzelne Einheit ausgeführt wird.

In der Regel berücksichtigen, dass das Modell in der Client in einem anderen beschränkten Kontext ist, weil ihre Bedenken werden ein bisschen anders als die auf dem Server sein.

  

Was ich versuche, meinen Kopf herum zu wickeln   ist, wie ich meine Repository aussetzen und   Modell, das auf dem Server sein. ist   es sogar möglich, komplexe aussetzen   Business-Objekte, den Staat über eine haben   Web-Service, oder muss ich ein verwenden   proprietäre Technologie, die nicht ist   Sprache / plattformunabhängig, wie .Net   Remote, EJB, COM +, DCOM, etc?

Ein gutes Domain-Modell wird sehr Verhaltens- und um den Problembereich (mit Fachexperten und Ihre Diskussionen) entworfen sein, ich würde so argumentieren dagegen Gestaltung (in der gleichen Art und Weise zu entfernte Verbrauchern ausgesetzt sein, dass es die Gestaltung zuerst aus der Datenbank oder GUI ist eine schlechte Idee).

Stattdessen würde ich sehe einen Stil wie REST oder Messaging und entscheiden über die Schnittstelle, die Sie machen möchten und dann Karte zu / von der Domäne. Also, wenn Sie mit REST gehen würden Sie Ihre Ressourcen entwerfen und API (URL, Darstellungen usw.) und dann würden Sie es aus dem Domänenmodell erfüllen müssen.

Wenn dies wird unnatürliche dann können Sie immer mehrere Modelle haben zum Beispiel die Zuordnung eines separaten Nur-Lese-Präsentation bestimmtes Modell auf den gleichen Datenquelle (oder die die komplexe Verhaltensdomänenmodell hüllt) ein Ansatz ist, ich habe mehrfach verwendet.

  

Einige andere Einschränkungen sind, dass ich   nicht wollen, die zu halten zu haben, laden   komplexes Domänenobjekt aus dem   Datenbank oder alles über die Weitergabe   jedes Mal verdrahten Ich möchte ein tun   Betrieb

Schauen Sie sich das Caching in HTTP und mehrere Darstellungen für eine Ressource unterstützt, auch einen Blick auf das Caching in Ihrer Daten-Access-Lösung.

  

Validierung und Fehlermeldung   Informationen müssen auch sein   den Benutzer angezeigt. ich möchte sein   die Lage, meint eine Menge logisch zu nennen   Domain-Objekt-Operationen, als wäre es   läuft auf der gleichen Maschine.

Sie können entweder repräsentieren diese als Ressource oder wahrscheinlicher Blick auf HTTP-Statuscodes und die Antwort Stellen Sie in diesen Situationen verwenden wollen würde.

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