5

Lo he visto por todas partes SO, blogs y libros, donde los autores dicen que agregue ViewModels específicos para su Vista en sus proyectos de modelo como envoltorios para sus objetos de modelo subyacentes. La idea es hacer que sea muy simple y específico cuando vaya a hacer el enlace del modelo a la Vista. Aquí hay un buen ejemplo: Rendering and Binding Drop Down Lists using ASP.NET MVC 2 EditorFor¿El uso de ViewModels y las referencias a System.Web.Mvc violan el patrón MVC?

Sin embargo, me molesta un poco que haya referencias ahora a System.Web.Mvc en mi modelo, que de otro modo podrían haber sido utilizadas para múltiples tomas (tal vez WCF API, Silverlight, etc.), pero ahora tengo referencias específicas a las dll de MVC que serán necesarias para construir mi modelo de proyecto.

Mi pregunta es: ¿esto viola los patrones MVC cuando comenzamos a agregar IEnumerable<SelectListItem> a nuestras clases modelo? ¿Y hay una capa alternativa viable para mover esto ay cómo, es decir, Controlador?

Cualquier pensamiento o comentario apreciado.

+0

eche un vistazo al proyecto de ejemplo de mvc desde aquí http://valueinjecter.codeplex.com/, se realiza sin tener ningún tipo de lógica en los modelos viewmodels – Omu

Respuesta

5

Personalmente, solo creo la lista de selección sobre la marcha en una lista IEnumerable más reutilizable en mi modelo, lo que significa que mi modelo no tiene nada relacionado con SelectLists, SelectListItems ni nada MVC específico.

Ejemplo según lo prometido - crear el SelectList en la vista, el uso de todos los bits normales vista del motor ...

<%= Html.ListBox("SelectedStuff", 
     new SelectList(Model.SomeOptions, "id", "name", Model.SelectedStuff)) %> 
+0

si la creación de las listas de selección sobre la marcha le impide usar tipeado vistas y sus homólogos del método HtmlHelper? – mirezus

+0

No, solo crea la lista de selección dentro de la vista ... Añadiré un ejemplo a mi respuesta. – Fenton

+0

Esto me parece feo;) Siempre hago IEnumerable para mi modelo de vista en un controlador (que también es específico de MVC) y obtengo vistas más claras. – Necros

1

No, ViewModels están destinados a ser consumidos por la vista y deberán encontrarse en su página proyecto. Sin embargo, su Modelo real no debería tener ninguna referencia a MVC o su proyecto web. Piense en su ViewModel como un puente de ese espacio web desde su Modelo a su Vista.

3

se relaciona este violan los patrones MVC cuando empezamos añadiendo IEnumerable a nuestros clases del modelo?

No es realmente PERO si está tratando de utilizar un Diseño Dirigido por Dominio o separación de preocupaciones entre su capa de negocios y MVC/capa de presentación de lo que es una violación.

  • modelos tienen sus entidades, su dominio, su negocio capa objetos.

  • ViewModels son sus pantallas, formulario publicaciones, mostrar cubos de datos.

Los modelos se asignan a ViewModels que pueden contener elementos dependientes de MVC. Piense si es así, ViewModels es directamente para MVC. Los modelos pueden ser para un servicio, winform, WPF o cualquier presentación programática del sistema de sistema de negocios.

Cuestiones relacionadas