Tengo curiosidad de todas las formas en que las personas construyen sus ViewModels y por qué eligen ese método.¿Cómo está rellenando/validando sus ViewModels?
me ocurren varias maneras aquí:
-1. Repositorio inyectado: el controlador carga el modelo y se asigna al ViewModel. Aquí, el constructor de ViewModel podría tomar varias colecciones para establecerlas de forma interna para ex. en una lista de selección como:
public CustomerController(ISomeRepository repository)
{
_repository = repository;
}
public ActionResult Create()
{
CustomerCreateViewModel model = new CustomerCreateViewModel(_repository.GetShipTypes,
_repository.GetStates);
..
..
}
-2. ViewModelBuilder: ya sea inyectado o instanciado en el controlador con una instancia del repositorio inyectado. Llamado a través de algo así como
>var orderViewModel = orderViewModelBuilder.WithStates().Build(orderId);
o,
var orderViewModel = orderViewModelBuilder.WithStates().Build(orderId);
-3. Directamente en el controlador (no se requiere código - es complicado)
-4. Algún otro servicio (inyectado o no) que devuelve modelo de dominio, que el controlador asigna a continuación, o un modelo de vista (cualquiera que haga esto para devolver un modelo de vista que no se nombra específicamente/observa como una clase constructor de modelo de vista?)
public JobCreateViewModel BuildJobCreateViewModel(int parentId)
{
JobCreateViewModel model = new JobCreateViewModel();
model.JobStatus = _unitOfWork.JobRepository.GetJobStatuses();
model.States=_unitOfWork.StateRepository.GetAll();
return model;
}
Ahora, en el viaje de regreso - con respecto a la validación de sus modelos de vista - hereda de una clase base ViewModel para validaciones estándar, o copia sus validaciones (ej. Atributos de anotación de datos) entre todos sus modelos de vista, o simplemente confiando en la validación del lado del servidor ¿todo se puede validar contra su objeto de dominio?
¿Algún otro? ¿Algo mejor? ¿Por qué?
EDIT Basado en un enlace a continuación, encontré un buen artículo de Jimmy Bogard sobre la arquitectura de ViewModels. Si bien no aborda la pregunta anterior directamente, es una gran referencia para cualquiera que venga aquí para obtener información de ViewModel. http://lostechies.com/jimmybogard/2009/06/30/how-we-do-mvc-view-models/
había un voto negativo aquí, solo curiosidad, ¿algo que pueda aclarar? –
En mi teléfono e inadvertidamente hice clic mientras intentaba protagonizar, lo siento. Ahora es muy tarde para deshacer. – Jason
ah no se preocupe, entonces:) –