Tuve exactly the same problem cuando pasé por Prism por primera vez.
Controllers
son básicamente para lógica que abarca un módulo completo, mientras que Presenters
son para lógica que es específica de View
.
Por ejemplo, un Presenter
respondería a un comando que da como resultado que se desactive un botón en la vista. Un Controller
respondería a un comando que da como resultado que el View
(y Presenter
) se cambie por completo, o que se cargue una vista/presentador diferente en una región diferente en el shell del módulo.
Editar: En cuanto a cuándo usarlos, puede omitir el Controller
por completo si no necesita la orquestación mencionada anteriormente. La aplicación más sencilla sólo tendrá una:
Module
: registra la vista/presentador en el Region
Presenter
: responde a los comandos de la vista y modifica el ViewModel
.
ViewModel
: adaptador entre Presenter
y View
que implementa INotifyPropertyChanged
View
: se une a ViewModel
y muestra la interfaz de usuario
Editar: En cuanto a Presentador vs modelo de vista, la mayor parte de su lógica debe estar en su presentador. Considere que su ViewModel contiene la lógica para su vista, pero el Presentador tiene que ver con las consecuencias de interactuar con la vista.
Por ejemplo, el usuario hace clic en el botón "Buscar" en su View
. Esto desencadena un ICommand
, que es manejado por su Presenter
.El Presenter
comienza la búsqueda y establece la propiedad ViewModel.IsSearching
, que activa la notificación PropertyChanged para CanSearch
. CanSearch
es una propiedad de solo lectura que se basa en varias otras propiedades (por ejemplo, IsSearchEnabled && !IsSearching
). El botón "Buscar" en el View
tiene su propiedad Enabled
vinculada a CanSearch
.
Estoy de acuerdo, las cosas un desastre maldita confuso. – Pierreten