2010-02-10 15 views
28

estoy en busca de algunos comentarios sobre dos enfoques diferentes para la definición ViewModelplana vs clases anidadas ViewModel en ASP.NET MVC

que tienen una clase de empresa

public class Company 
{ 
    public string Name { get; set; } 
    public int CountryID { get; set; } 
} 

de las opiniones creación y edición de I necesita una lista de países para completar una DropDownList para la selección de CountryID. Puedo ver dos opciones amplias de cómo estructurar el ViewModel que se detallan a continuación.

anidado modelo de vista

public class CompanyCreateEditViewModel 
{ 
    public Company Company { get; set; } 
    public IEnumerable<Country> Countries{ get; set; } 
.... 
} 

plana modelo de vista

public class CompanyCreateEditViewModel 
{ 
    public string Name { get; set; } 
    public int CountryID { get; set; } 
    public IEnumerable<Country> Countries{ get; set; } 
.... 
} 

En la actualidad estoy a favor del enfoque anidado, ya que me salva de la definición de los campos por segunda vez, pero quiero para abrirlo a mejores enfoques y comentarios.

Gracias

Respuesta

21

yo personalmente prefiero el enfoque anidado para la presentación, ya que conduce a un diseño más lógico cuando se utiliza vistas parciales. Es posible que tenga un CompanyPartialView utilizado en toda la aplicación que sabe cómo representar un Company, por lo que tiene mucho sentido exponer el Company como una estructura anidada.

Por otro lado, las clases planas de ViewModel son las más fáciles de trabajar con los datos entrada. Solo tiene un grupo de campos de formulario que se correlacionan con propiedades individuales. Entonces, mi estrategia generalmente es aplanarlos para las páginas de ingreso de datos y anidarlos para las páginas de presentación/informe.

+1

Totalmente de acuerdo. Uso anidado para la presentación - 'CompanyViewModel' - y plano para la entrada de datos -' CompanyCreateEditViewModel'. –

+0

@JarrettMeyer ¿Utiliza AutoMapper para el modelo de vista anidado y plano? ¿Hay algún problema? Solo tengo curiosidad, tengo una mala experiencia al usar AutoMapper con el modelo de vista anidado – Willy

+0

Estoy teniendo una mala experiencia al utilizar AutoMapper por todas partes ... – Worthy7

5

prefiero anidadas, por varias razones:

  • eso es lo orientado a objetos se trata.
  • Si usa LINQ to SQL o Entities, o un ORM, puede simplemente pasar los objetos ORM y no tener que pasar todo tipo de propiedades.
  • Puede pasar otras vistas, por lo que puede crear modelos separados para vistas parciales, y si esa vista usa una parcial, puede pasar la clase de modelo de vista parcial como una propiedad de la clase de modelo de vista.

EN MIEMBRO, HTH.

+0

le está dando el modelo completo a la vista parcial o solo la necesaria? Aunque creo que dar solo el modelo de vista anidado está bien, pero el automapper no puede reconocer que las propiedades de la vista parcial son miembros del modelo anidado – Muflix

+1

Depende. ¿Qué necesita la vista parcial? ¿Es la vista parcial parte de una forma más grande (que luego necesitaría todo el modelo para que la ruta ID funcione correctamente). Si la vista parcial es independiente, mantenerla aislada en el submodelo está bien.En su caso, si necesita que AUtoMapper reconozca ciertas propiedades, posiblemente sea una razón para pasar el modelo completo. –

+0

Gracias Brian. – Muflix