2010-03-01 4 views
5

Ich lerne gerade, wie man erweiterte Verwendung von WPF über das Prism (Composite WPF) Projekt machen kann.StockTrader RI> Controller, Presenter, WTF?

Ich sehe viele Videos und Beispiele und die Demo-Anwendung StockTraderRI mir diese Frage macht fragen:

Was ist die genaue Rolle von jedem der folgenden Teil?

  • SomethingService: Ok, das etwas ist, Daten
  • SomethingView verwalten: Ok, das ist, was
  • SomethingPresentationModel angezeigt ist: Ok, das enthält Daten und Befehle für die Ansicht zu binden (äquivalent zu einem Ansichtsmodell).
  • SomethingPresenter: Ich verstehe nicht wirklich Verwendung
  • SomethingController ist: Schließen Sie nicht verstehen

ich sah, dass ein Moderator und ein Controller nicht notwendig sind, aber ich möchte verstehen, warum sie hier sind . Kann mir jemand ihre Rolle und mitteilen, wenn sie verwenden?

+1

Ich bin damit einverstanden, die Dinge verwirrend freaking Chaos. – Pierreten

Antwort

7

Ich hatte exactly the same problem, als ich zuerst durch Prism ging.

Controllers sind grundsätzlich für Logik, die ein ganzes Modul umfasst, während Presenters sind für Logik, die spezifisch für eine View ist.

Zum Beispiel würde ein Presenter auf einen Befehl antworten, der dazu führt, dass eine Schaltfläche in der Ansicht deaktiviert wird. A Controller würde auf einen Befehl reagieren, der dazu führt, dass die View (und Presenter) vollständig geändert wird, oder vielleicht einen anderen View/Presenter in einer anderen Region in der Shell des Moduls lädt.

Bearbeiten: Sie können die Controller vollständig überspringen, wenn Sie die oben erwähnte Orchestrierung nicht benötigen. Die einfachste Anwendung wird nur ein:

  • Module: registriert die Ansicht/Moderator in die Region
  • Presenter: antwortet aus der Sicht auf Befehle und modifiziert die ViewModel.
  • ViewModel: Adapter zwischen Presenter und View die INotifyPropertyChanged
  • View implementiert: bindet an ViewModel und zeigt UI

Edit: Was Moderator vs Ansichtsmodell, die meisten Ihrer Logik in Ihrem Presenter sein sollte. Stellen Sie sich Ihr ViewModel so vor, dass es die Logik für Ihre Ansicht enthält, aber dass der Presenter sich mit den Konsequenzen der Interaktion mit der Ansicht befasst.

Zum Beispiel klickt der Benutzer auf die Schaltfläche "Suchen" in Ihrem View. Dies löst eine ICommand aus, die von Ihrer Presenter gehandhabt wird.Die Presenter beginnt mit der Suche und legt die ViewModel.IsSearching-Eigenschaft fest, die die PropertyChanged-Benachrichtigung für CanSearch auslöst. CanSearch ist eine schreibgeschützte Eigenschaft, die auf mehreren anderen Eigenschaften basiert (z. B. IsSearchEnabled && !IsSearching). Die Schaltfläche "Suchen" in der View hat ihre Enabled Eigenschaft an CanSearch gebunden.

+0

Oh, es ist nur eine Trennung zwischen dem, was in der aktuellen Ansicht (Presenter) passiert und was im Modul (Controller) passiert. Ich mache eigentlich alle logischen Sachen im ViewModel. Ist das falsch oder ist das nur eine strategische Entscheidung? – SandRock

+0

'Prism' ist nur eine Empfehlung. Nachdem ich das gesagt habe, habe ich meine Antwort mit einigen VM vs Presenter-Informationen aktualisiert. –

+0

Großartig, alles ist jetzt klar in meinem Kopf. Ich werde das jetzt versuchen. Vielen Dank für Ihre Zeit :) – SandRock

0

Meiner Meinung nach Regler hier in bezieht sich auf Application Controller

+0

Dies gilt für Prism, wenn es nur ein Modul gibt. –

Verwandte Themen