none
ViewModels Vs Entities RRS feed

  • Pregunta

  • Hola! Soy nuevo en esto del desarrollo utilizando MVC y nuevo en MSDN! así que espero ser claro en mi pregunta y que me corrijan si estoy equivocado de alguna manera. Mi consulta es la siguiente: Hasta donde se los ViewModels van en la carpeta Models y se utilizan únicamente para manejar las vistas, pero si por ejemplo realizo un "RegisterViewModel" en donde agrego Usuario, Contraseña, Correo, etc, etc... Y deseo almacenar eso en una base de datos, como hago eso? es decir, debería crear una entidad para la vista ? Realmente no tengo muy claro como se debe manejar la información entre ViewModels y entidades y me gustaría tener un poco mas claro esto, muchas gracias 
    martes, 29 de septiembre de 2015 3:13

Respuestas

  • La confusión surge porque tienes dos modelos: El Modelo que es la "M" de MVC, y que se usa para transportar datos entre el controlador y la vista, y el modelo de entidades, que se usa para transportar datos entre la base de datos y el controlador.

    De manera general, los dos modelos no tendrían por qué coincidir. Se deberían generar en dos carpetas distintas, y el código del comtrolador debe ser el que traslade la información relevante desde un modelo al otro. Lo que ocurre es que en muchos ejemplos sencillos y tutoriales la información que se usa en la vista es la misma que hay en la base de datos, con lo que los dos modelos tienen la misma información, y entonces no vale la pena duplicarlos y se usa un único modelo para las dos cosas. Esto confunde a muchos principiantes, que a consecuencia de esos tutoriales creen que el modelo de MVC tiene que ser una entidad de las que se usan para el ORM que accede al almacenamiento de datos. No te confundas, si tu vista lo requiere, haz un modelo sólo para ella (que a veces se llama "ViewModel" para no confundirlo con el modelo de entidades), y que el controlador rellene ese modelo con los datos que necesite. Si alguno de esos datos se tiene que traer de base de datos, accede a la BD usando tu ORM favorito junto con las entidades que requiera, olvidándote de MVC y tratándolo como una capa de datos para una aplicación cualquiera.

    • Marcado como respuesta Erick Salazar martes, 29 de septiembre de 2015 18:40
    martes, 29 de septiembre de 2015 4:21

Todas las respuestas

  • La confusión surge porque tienes dos modelos: El Modelo que es la "M" de MVC, y que se usa para transportar datos entre el controlador y la vista, y el modelo de entidades, que se usa para transportar datos entre la base de datos y el controlador.

    De manera general, los dos modelos no tendrían por qué coincidir. Se deberían generar en dos carpetas distintas, y el código del comtrolador debe ser el que traslade la información relevante desde un modelo al otro. Lo que ocurre es que en muchos ejemplos sencillos y tutoriales la información que se usa en la vista es la misma que hay en la base de datos, con lo que los dos modelos tienen la misma información, y entonces no vale la pena duplicarlos y se usa un único modelo para las dos cosas. Esto confunde a muchos principiantes, que a consecuencia de esos tutoriales creen que el modelo de MVC tiene que ser una entidad de las que se usan para el ORM que accede al almacenamiento de datos. No te confundas, si tu vista lo requiere, haz un modelo sólo para ella (que a veces se llama "ViewModel" para no confundirlo con el modelo de entidades), y que el controlador rellene ese modelo con los datos que necesite. Si alguno de esos datos se tiene que traer de base de datos, accede a la BD usando tu ORM favorito junto con las entidades que requiera, olvidándote de MVC y tratándolo como una capa de datos para una aplicación cualquiera.

    • Marcado como respuesta Erick Salazar martes, 29 de septiembre de 2015 18:40
    martes, 29 de septiembre de 2015 4:21
  • hola

    por un lado tendras el entidades que definen tu dominio, y seras las que persistas o se relacionen con entity framework, si es que lo estas usando

    por el otro puedes tomar dos caminos

    - usas las mismas entidades que persites como model de la view

    - o si la view es muy compleja se suele aplnar los datos convirtiendolos en otro modelo equivalente mmalado viewmodel

    por supuesto de alguna forma deberas poder mapear el viewmodel a las entidades que persistes, puedes hacer esto de forma manual o con ayuda de automapper

    si tu entidad que usas para persistir es simple y tu view solo mostrar esos datos no veo que necesites ningun viewmodel, usa directo la entidad para definir la view

    el viewmodel aplica si es algo complejo lo que encesitas representar al usuario

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 29 de septiembre de 2015 8:26