2010-08-16 16 views
8

Estoy creando una herramienta cuyo objetivo es descargar un archivo basado en unos pocos parámetros.Responsabilidad de un modelo de vista

El primer paso es establecer (o recuperar) esos parámetros.

Los diferentes conjuntos de parámetros son recuperados (digamos a través de archivos de configuración) por un FileDownloadsManager: sabe exactamente qué parámetros usar para descargar el archivo correcto.

esos parámetros se almacenan en una clase, y tengo una lista de instancias de esta clase.

Eso significa que puedo descargar mi archivo con múltiples conjuntos de parámetros posibles.

Alrededor de esos ParameterSets, construí ParametersSetsViewModels para poder mostrarlos en una lista y agregar algunas propiedades de solo lectura. Internamente, los ParametersSetsViewModels tienen una referencia a los ParametersSets subyacentes usados ​​como fuente para los miembros del Modelo de Vista.

ahora, cuando selecciono mi conjunto de parámetros, me gustaría que se descargue el archivo relacionado.

¿De quién es la responsabilidad?

Tengo la sensación de que si ViewModel está demasiado activo, al tener un método que devuelve el archivo descargado, esto sería contrario al patrón de MVVM; Cuál es su opinión sobre esto ?

Bonificación: la descarga debe ser factible en segundo plano con los métodos asincrónicos de BackgroundWorkers o WebClient.

Respuesta

19

Me parece que todos asumen que MVVM no tiene controladores ya que omitieron la C. MVVM es en realidad una variación de MVC "que simplemente agrega ViewModels".

¿Tal vez debería haberse llamado MVCVM?

ViewModels solo están disponibles para descargar el código "GUI" de la vista y para contener cualquier dato para el enlace. ViewModels no debe hacer ningún procesamiento. Una buena prueba es que su ViewModel se puede probar a través de pruebas unitarias automatizadas y no tiene dependencias de fuentes de datos, etc. No deberían tener idea de dónde provienen realmente los datos (o quién los está mostrando).

Aunque se puede pasar por alto/evitar, un controlador es responsable de decidir qué modelo de datos mostrar y en qué vistas. ViewModel es un puente entre Modelos (la M en MVVM) y Vistas. Esto permite una autoría XAML "separada" más simple.

En respuesta a su pregunta, el procesamiento debe ser manejado por un controlador. Si necesita actualizar ViewModel para mostrar indicadores ocupados, etc., eso está bien, pero no es la Vista o el Modelo o la responsabilidad de ViewModel.

+1

Gracias por su visión, especialmente por la reflexión sobre "MVCVM": esto definitivamente es algo que vale la pena decir: ¡Los Controladores siguen vivos! –

Cuestiones relacionadas