2011-06-24 20 views
5

El enfoque Modelo-Vista-VistaModelo (MVVM) parece ser el patrón de corredor principal en el desarrollo de la interfaz de usuario de WPF. Casi todos los artículos que leo implican que es la mejor práctica. El uso de RelayCommand o DelegateCommand también es prominente en muchos artículos y parece que es casi imposible implementar MVVM sin utilizar ninguno de ellos (ni ninguna otra variación). Entonces, ¿por qué no son parte de .NET 4?¿Por qué RelayCommand o DelegateCommand no forman parte de WPF?

Sé que RelayCommand es realmente fácil de implementar y muchos kits de herramientas de terceros ya lo tienen, pero me pregunto por qué Microsoft omite algo tan básico y fundamental para la implementación de las llamadas "mejores prácticas". "¿?"

Respuesta

0

Mi opinión personal sobre esto es que RelayCommands rompe la intención de MVVM.

Implementar un solo comando para cada propósito es, en mi opinión, más "mejor práctica" que utilizar RelayCommands, ya que cada clase tiene una "responsabilidad única". Un comando debe encapsular su comportamiento en sí mismo y no delegarlo en el modelo de vista.

Debugging RelayCommands es menos directo y un verdadero dolor cuando tienes que pasar por tantas y tantas funciones/acciones/delegados y saltar de un objeto a otro.

+0

Realmente no veo que rompan ninguna de las promesas que hace MVVM. Al final, MVVM tiene que ver con el desacoplamiento, por ejemplo, desde la vista y la lógica detrás de él, y esos comandos lo logran perfectamente. SRP es innegablemente uno de los principios más importantes, pero debe tener cuidado en dónde colocar el R .. Para mí, la responsabilidad de un RelayCommand es proporcionar una forma de ejecutar algo que es la respuesta a un evento, y me gusta poner eso 'Algo' en la propia máquina virtual, por lo que el comando tiene una sola dependencia (la VM). De lo contrario, el comando podría tener una dependencia en uno o más objetos que introducen un acoplamiento más estricto. – stijn

+0

... pero todo depende de la situación exacta, por supuesto. También tengo muchos RelayCommands que no dependen de la máquina virtual, pero solo publican un evento en un EventAggregator más o menos. En ese caso, sería una locura enviar la solicitud a la máquina virtual. – stijn

2

Porque Microsoft se encarga de WPF, y no de MVVM.

Si quieres un conjunto de herramientas completo que contiene todos los componentes necesarios para una buena aplicación MVVM, le animo a echar un vistazo a Prisma: A good tutorial here

La razón básica es que Microsoft se está centrando en la "corriente principal" funcionalidades WPF (como mejorar Controles y Vinculaciones). MVVM es, si tengo razón, "supervisado" por la fundación MVVM.

+1

Si se refiere a [esto] (http://mvvmfoundation.codeplex.com/), entonces eso es solo una biblioteca, no un grupo de personas que intenta mantener/supervisar el patrón de MVVM. – CodeNaked

1

Como con la mayoría de las cosas se trata de dinero. Puede ser una clase simple, pero incluirla en .NET requiere mucho trabajo. Una sola clase debe ser:

  1. Totalmente probado antes de la liberación. Las pruebas de regresión también deben implementarse para versiones futuras.
  2. Totalmente documentado en varios idiomas, que también debe ser verificado.
  3. Debería renombrarse, ya que usar RelayCommand o DelegateCommand probablemente rompería cualquier WPF que ya tenga estas clases, ya que habría conflictos de nombres.

Cada uno de estos requiere más trabajo de lo que esperaría (es decir, # 2 tendría los primeros borradores, revisiones, aprobación final, etc.).

Encontrado un enlace relevante here.

Cuestiones relacionadas