I am in the middle of a quite complex MVVM development using PRISM so I already had to cope with this kind of concerns.
My personal conclusions:
MVVM vs MVC /PopUps & co
- MVVM is really a great pattern and in most cases it completely replaces MVC thanks to the powerful data binding in WPF
- Calling your service layer directly from the presenter is a legitimate implementation in most cases
- Even quite complex List /Detail scenarios may be implemented by pure MVVM thanks to the {Binding Path=/} syntax
- Nonetheless, when complex coordination between multiple views needs to be implemented, a controller in mandatory
- Events may be used; the old pattern which implies storing IView (or AbstractObserver) instances in the controller is obsolete
- The controller can be injected in each Presenter by IOC container
- Prism’s IEventAggregator service is another possible solution if the only use of the controller is event dispatching (in this case it can completely replace the controller)
- If views are to be dynamically created, this is a very well suited job for the controller (in prism the controller will get injected (IOC) a IRegionManager )
- Modal dialog boxes are mostly obsolete in modern composite applications, except for really blocking operations like mandatory confirmations; in these cases modal activation can be abstracted as a service called inside the controller, and implemented by a specialized class, which also allows for advanced presentation-level unit testing. The controller will, for example, call IConfirmationService.RequestConfirmation(“are you sure”) which will trigger a modal dialog display at runtime and can be easily mocked during unit testing