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.
Ich bin damit einverstanden, die Dinge verwirrend freaking Chaos. – Pierreten