2 Stimmen

Best-Praktiken zur Erstellung von RIA-Diensten DomainContext

Wenn Sie sich irgendwelche MVVM-Beispiele von Silverlight ansehen, werden Sie feststellen, dass jeder ViewModel seinen eigenen DomainContext hat. Ich sehe jedoch nicht wirklich die Notwendigkeit, einen ViewModel-spezifischen DomainContext zu haben.

Ich neige dazu, einen gemeinsamen DomainContext für alle ViewModels zu erstellen. Auf diese Weise tritt das Problem, dass eine Entität in einen anderen DomainContext hinzugefügt und aus einem anderen DomainContext gelöscht wird, nie auf. Andernfalls kann es passieren, dass Sie versuchen, aus einem DomainContext zu löschen, der diese spezifische Entität überhaupt nicht hat, und somit eine Ausnahme auftreten könnte.

Kann mir jemand sagen, was die besten Praktiken für DomainContext sagen?

1voto

Xcalibur37 Punkte 2225

Es gibt viele Möglichkeiten, das anzugehen, also das Beste, was ich tun kann, ist zu teilen, was ich tue.

1) Erstellen Sie für jede Domain einen Kontext basierend auf Funktion. Zum Beispiel werde ich einen Kontext für alle Benutzerfunktionen haben, einen für alle Kundenfunktionen, einen für Bestellfunktionen usw. Dies ermöglicht eine saubere Segmentierung der BusinessLayer.

2) Erstellen Sie benutzerdefinierte Klassen im Webprojekt, die anstelle der abstrahierten Ansichten zurückgegeben werden, die vom Assistenten erstellt wurden. Persönlich habe ich ein Problem damit, den Namen meiner DB-Ansicht im zurückgegebenen IQueryAble an das Silverlight-Projekt anzugeben, da das Silverlight-Projekt als die UI-Schicht betrachtet werden kann. Es erzwingt eine indirekte Abhängigkeit von der DataLayer, die wir nicht möchten. Ja, es erfordert mehr Arbeit beim Hinzufügen zusätzlicher Klassen, aber es hilft, die Abstraktion für eine ordnungsgemäße 3-Schichten-Architektur durchzusetzen.

3) Erstellen Sie benutzerdefinierte Klassen auf der UI-Ebene, die die zurückgegebenen Daten aus den zugeordneten Methoden (aus dem DataContext) verarbeiten. Dies hilft, die Abstraktion durchzusetzen.

Denken Sie daran, das Ziel ist es, Ihren Code so locker gekoppelt wie möglich zu gestalten. Das erfordert immer zusätzliche (und manchmal redundante) Codierung von Ihrer Seite, aber das Endergebnis ist die Mühe wert.

Sie können auch in Betracht ziehen, eine RIA-Klassenbibliothek zu erstellen; dies ermöglicht eine weitere Abstraktion. Es ist nicht die einfachste Implementierung, aber es ist ein Schritt in die richtige Richtung, wenn Sie versuchen, die Kommunikation zwischen den Silverlight- und Webprojekten zu erleichtern.

1voto

Gayot Fow Punkte 8522

Meine beiden Lehrbücher über MVVM, die sind...

Gebäude Enterprise Anwendungen mit Windows® Presentation Foundation und dem Model View ViewModel Pattern von Raffaele Garofalo

Pro WPF und Silverlight MVVM Effektive Anwendungsentwicklung mit Model-View-ViewModel von Gary McLean Hall

...adressieren nicht direkt den DomainContext. Allerdings sind sich beide Autoren einig, dass im Hinblick auf die Data Access Layer das Designmuster 'Unit of Work' empfohlen wird. Wenn Sie erwägen, einen oder mehrere DomainContext(s) in einer SL-Anwendung als Teil Ihres Data Access Layer zu verwenden, würden Sie (zumindest laut diesen Autoritäten) empfohlen, sie in ein 'Unit of Work'-Muster zu kapseln. Lassen Sie Ihr ViewModel mit diesen Abstraktionen umgehen.

Was bewährte Verfahren betrifft, denke ich, dass Sie 'bewährte Verfahren' erfüllt haben, wenn diese Muster sorgfältig in Betracht gezogen wurden. Die Implementierung könnte in vielen Situationen übertrieben sein.

Es gibt eine Einführung in 'Unit of Work' unter http://msdn.microsoft.com/en-us/magazine/dd882510.aspx

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X