Pregunta

Al usar MVC y convertir sus datos en ViewModels, ¿cuál es la forma aceptada de hacer esto?

En este momento estoy usando AutoMapper para hacer esto y está funcionando bien. Sin embargo, vi en un artículo de blog (creo que fue Rob C) tener un constructor en ViewModel que toma el número de parámetros requeridos y luego genera el ViewModel

Por ejemplo, var RetViewModel = new ViewModel (MyObject);

Esto parece una forma decente de hacerlo, ¿pensamientos?

¿Fue útil?

Solución

La " forma aceptada " generalmente es la forma que funciona mejor para usted.

Nunca he oído hablar de AutoMapper y cuando lo examiné, lo que obtuve fue que crea un mapeo de objetos mágicos siguiendo una determinada convención.

Screencast en: http://www.dnrtv.com/default.aspx? showNum = 155

Nota: solo vi aproximadamente la mitad de ese screencast, por lo que mis pensamientos sobre AutoMapper son algo incompletos.

Personalmente no quiero usarlo porque requiere que escriba un código adicional para mapear / "aplanar" entre las propiedades del objeto (código, IMO, mejor a la izquierda en la lógica del constructor). En el ejemplo de screencast, ese código generalmente se coloca en los métodos de acción de un controlador que puede provocar hinchazón. (Me gustan los controladores / acciones flacos)

Utilizo el método que proporcionó en su publicación, haciendo que el constructor del modelo tome un objeto y haga todo el trabajo.

Además, siempre creo un constructor vacío que no toma parámetros para poder establecer manualmente los valores de propiedad del objeto ViewModel.

Ejemplo:

CustomViewModel myModle = new CustomViewModle
{
    Property1 = "Something",
    Property2 = 3,
    //etc..
};

Para resumir, intente en ambos sentidos y vea qué funciona para usted. AutoMapper es una gran idea y puedo ver que ayuda en muchas situaciones, sin embargo, creo que en algunos puntos cuando lo use, escribirá tanto código usándolo si usara constructores de objetos.

Otros consejos

Bueno, el " recomendado oficialmente " El enfoque consiste en dejar que el mecanismo de encuadernación del modelo se encargue de eso. Eso es más simple y automatiza el proceso. El modelo tendrá que exponer sus propiedades para que sean de lectura y escritura para que el archivador pueda inicializarlo.

La segunda opción de la que está hablando probablemente se beneficiará de hacer que sus modelos sean objetos inmutables. Es decir, todas las propiedades son de solo lectura y las inicializa una vez a través de los parámetros del constructor. Esto requerirá que mire directamente en FormCollection para extraer los valores enviados. Eso es más trabajo pero tiene sus propias ventajas, como ser un tipo de programación defensiva.

No puedo decir qué camino es mejor, ambas son opciones. Personalmente prefiero el segundo estilo por ahora.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top