Pregunta

A mi entender, los modelos de dominio son clases que sólo se describen los datos agregados (raíces). Son POCOs y no hacen referencia a las bibliotecas externas (nada especial).

Ver modelos en el otro lado son clases que contienen objetos del modelo de dominio, así como todos los objetos específicos como interfaz SelectList. A ViewModel incluye using System.Web.Mvc;.

A tirones repositorio de datos fuera de una base de datos y los alimenta a nosotros a través de los objetos del modelo de dominio. ¿Qué mecánico o dispositivo crea los objetos de vista del modelo, poblando desde una base de datos? ¿Sería una fábrica que tiene acceso a la base de datos? ¿Le sangran las clases de vista específicos como System.Web.Mvc en el repositorio? Algo más?

Por ejemplo, si usted tiene una lista desplegable de las ciudades hacia abajo, que haría referencia a un objeto SelectList en la raíz de su objeto View Modelo, justo al lado de su referencia modelo de dominio:

public class CustomerForm {
    public CustomerAddress address {get;set;}
    public SelectList cities {get;set;}
}

Las ciudades debe provenir de una base de datos y estar en la forma de un objeto de lista de selección. La esperanza es que no se crea un método para extraer repositorio especial a cabo sólo las ciudades distintas, a continuación, crear un segundo objeto SelectList redundante solamente por lo que tiene los tipos de datos adecuados.

¿Fue útil?

Solución

AutoMapper podría ser utilizado para convertir sus modelos para ver los modelos. He aquí una muy buen artículo de cómo se podría utilizar en su aplicación ASP.NET MVC.

Básicamente su acción del controlador podría tener este aspecto:

[AutoMap(typeof(ProductModel), typeof(ProductViewModel))]
public ActionResult Index(int id)
{
    return View(_repository.GetById(id));
}

Así que todavía trabajo con sus modelos de dominio en el controlador y el filtro de la acción AutoMap utilizará AutoMapper para convertir el modelo a una vista de modelo según un archivo de asignación y pasarlo a la vista.

Otros consejos

Yo sugeriría usted para mirar CQRS (comando de consulta de Responsabilidad segregación). Sobre la base de este patrón, que realmente no necesita para obtener su modelo de repositorio y luego asignarla al modelo de vista.

Puede dedicar un conjunto separado de clases para recuperar datos (Consulta de) y la visualización de la vista. Puede llamar a estos proveedores de clases o lo que quiera. Estas clases pueden volver modelo de vista o dataset / objetos DataTable genéricos. Hay 2 beneficios de este enfoque:

1- Usted no tiene que preocuparse de correspondencia entre modelo y modelo de vista, por lo tanto, más fácil de codificación y mantenimiento. 2- Muchas veces las propiedades tiene su modelo no son exactamente lo que los usuarios Espera a ver en la pantalla. Algunos desarrolladores añadir nuevas propiedades a su modelo sólo con el propósito de pantalla, lo que hace que el modelo pierda su realidad en el largo plazo. Al devolver modelo de vista o conjunto de datos / DataTable directamente de su proveedor sin depender de su modelo, que permite que su modelo y sus ViewModels a evolucionar por separado.

Mosh

Yo diría que rellenar un modelo de vista de un objeto de dominio es de responsabilidad de controlador. El controlador "para conseguir la" acción sería recuperar el objeto de dominio desde el repositorio, crear un modelo de vista, poblar el modelo de vista y luego pasarlo a la vista.

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