2008-12-17 2 views
41

Eine Herausforderung bei Silverlight-Steuerelementen besteht darin, dass Eigenschaften, die an Code gebunden sind, in Blend nicht mehr wirklich bearbeitet werden können. Wenn Sie z. B. ein ListView haben, das aus einem Datenfeed gefüllt ist, sind beim Bearbeiten des Steuerelements in Blend keine Elemente sichtbar.Sollte ich das Model-View-ViewModel (MVVM) -Muster in Silverlight-Projekten verwenden?

Ich habe gehört, dass das MVVM-Muster, das von der WPF-Entwicklergemeinschaft stammt, auch dabei helfen kann, Silverlight-Steuerelemente "mischbar" zu halten. Ich Einwickeln noch meinen Kopf herum, aber hier sind einige Erklärungen:

Ein möglicher Nachteil ist, dass das Muster erfordert zusätzliche Klassen, obwohl nicht unbedingt mehr Code (wie durch den zweiten Link oben gezeigt). Gedanken?

+0

ich empfehlen Ihnen, auch IOC, Caliburn-Micro und Ninject eine tolle Combo machen. –

Antwort

32

Ich denke definitiv, dass Sie das MVVM-Muster für Silverlight-Anwendungen verwenden sollten - und einer der Vorteile des Musters ist, dass Sie Ihre Anwendung wirklich durch einige einfache Techniken mischbar machen können. Ich bezeichne oft "Mischbarkeit" als "Design für Designability" - dass Sie bestimmte Techniken verwenden, um sicherzustellen, dass Ihre Anwendung in Blend gut aussieht.

Eine der Techniken - wie Torbjørn hervorhebt - ist die Verwendung eines Dependency-Injection-Frameworks und die Bereitstellung verschiedener Implementierungen Ihrer externen Services, abhängig davon, ob der Code in Blend oder im Browser ausgeführt wird. Daher konfiguriere ich meinen Container für die Verwendung eines Dummy-Datenproviders, wenn der Code in Blend ausgeführt wird. Auf diese Weise erhalten Sie Entwurfszeitunterstützung für Ihre Listboxen, Datengrids usw.

Die Herausforderung besteht oft darin, den DataContext deklarativ festzulegen - so benutze ich oft eine Service Locator Klasse aa "Frontend" zum IoC Container. Auf diese Weise kann ich den Datenkontext an eine Eigenschaft im Service Locator binden.

Eine andere Technik erzeugt eine Art von ObjectDataSource-Steuerelement (nicht visuell), das zwei Eigenschaften hat: Entwurfszeit DataContext und RunTime Datenkontext. Das Steuerelement erkennt, wo gerade ausgeführt wird, und legt dann den übergeordneten DataContext auf das richtige Objekt fest.

2

Ich habe ein paar Optionen ausprobiert und ich bin für mich auf MVVM als die beste Wahl niederzulassen. Mischbarkeit ist ein wichtiger Punkt, und ich finde den VM-Aspekt auch intuitiv für das Rigging von dynamischen Verhaltensweisen und prozeduralen Effekten und Animationen (wie Nikhils Silverlight.FX). An einem Punkt habe ich versucht, Blend durch fließende Interfaces zu vermeiden, aber ich finde die Kopplung zwischen UI und Verhalten auf lange Sicht zu schmerzhaft. Ich möchte meine Benutzeroberfläche in Blend erstellen und dann Effekte und andere Verhaltensweisen im Code hinzufügen. Dies erweist sich als das beste Muster, dem ich bisher folgen kann.

1

Ich habe MVVM in letzter Zeit bei ein paar verschiedenen Silverlight-Projekten verwendet und es funktioniert wirklich gut, ich würde es definitiv empfehlen.Jonas's post ist ein großartiger Ort, um zu starten, ich habe vor kurzem blogged auf meiner MVVM Erfahrungen auch und erstellt eine wirklich einfache Lösung, um die wichtigsten Touch-Punkte zu demonstrieren.

0

Ich habe immer gedacht MVVM und PresntationModel http://martinfowler.com/eaaDev/PresentationModel.html sind im Wesentlichen die gleiche Sache. PresentationModel ist viel einfacher zu sagen. Ich habe es erfolgreich in Java Swing, Windows Forms, WPF und Silverlight verwendet. Wenn Sie in Bezug auf die Trennung von Anliegen denken, ist ein Präsentationsmodell sehr sinnvoll. Sie haben eine Klasse, deren einziges Anliegen es ist, ein Präsentationsfreundliches Modell zur Verfügung zu stellen. Es ist wirklich egal, welche Technologie verwendet wird, um sie auf dem Bildschirm zu zeigen. Es kann einige Implementierungsdetails ändern, aber die Interessen auseinander zu teilen ist eine gute Idee, egal wie Sie die Informationen zeigen. Aufgrund dieser Trennung können Sie problemlos Tests für Ihr Präsentationsmodell schreiben, unabhängig von der Ansichtstechnologie. Das ist also ein Plus.

2

Ich denke, viele von uns warten auf die Vorreiter, um wirklich gute Beispiel-Apps mit MVVM in Silverlight (und WPF für die Angelegenheit) zu erstellen. Es gibt eine Reihe von kniffligen Bereichen wie der lack of ICommand in Silverlight, oder die Schwierigkeit von interacting with animations Starten und Stoppen nur mit Datenbindung.

Es ist definitiv ein Muster für die Zukunft zu beobachten, und es lohnt sich, es auszuprobieren, wenn es Ihnen nichts ausmacht, gelegentlich an den Orten zu betrügen, wo Sie es nicht ganz herausfinden können.

2

I agree with Jonas. MVVM scheint das Modell zu sein, das am besten für mich funktioniert (obwohl John Papa denkt, dass MVP mehr Sinn macht). Ich habe einen MSDN-Artikel dazu im März, der hoffentlich auf den Ruf nach einem guten Beispiel antworten wird.

BTW, ich würde gerne etwas Zusammenhalt in der MVVM Framework-Abteilung sehen. Es gibt keine gute Lösung für einen Rahmen, der noch folgen sollte. Ich mag Jonas '(ich denke, Jonas ist das FX-Framework), aber da es nicht WPF-kompatibel ist, könnte es für einige nicht die richtige Wahl sein.

3

I also agree with Jonas in Bezug auf MVVM mit Silverlight. Ich glaube, dass MVP auch eine gute Wahl ist, aber in letzter Zeit hatte ich Zeit, MVP und MVVM mit Silverlight auszuprobieren, und ich bin viel glücklicher mit den Ergebnissen von MVVM. (Ja, ich habe meine Meinung geändert, je mehr ich MVVM benutzt habe). Die VM abstrahiert die Bindung des Modells von der Ansicht (offensichtlich) in MVVM, was mehr Bindungsszenarien (zumindest sauberere Möglichkeiten, dies zu ermöglichen) als mit MVP ermöglicht. Das ist nur ein Aspekt.

Ich werde einige Beispiele von MVP und MVVM mit Silverlight auf meiner Website veröffentlichen.

0

Mit der Veröffentlichung Februar 2009 von Prism v2 von P & P, eine noch bessere Unterstützung für MVVM jetzt für Silverlight und WPF. Weitere Informationen finden Sie unter microsoft.com/compositewpf.

1

ist es eine sehr gute Techdays 2010 Video Einführung in das MVVM Muster, erklärte deutlich:

Für kompliziertere Anwendungen, die einen höheren Grad an automatisierten Testen es erfordern macht auf jeden Fall Sinn, und der Wechsel von DependencyProperties zu DataContext-Binding ist viel besser als das von ASP.NET. Die größte Herausforderung, die ich mit Silverlight gefunden habe, ist das Testen der eigentlichen Benutzeroberfläche (es gibt bisher ein kommerzielles Framework) und das riesige Gewirr von Ereignisaufrufen, die man bei der Verwendung von WCF-Diensten (oder dem WebClient) in Angriff nimmt) mit Silverlight.