2011-03-24 14 views
12

¿Sería una buena práctica crear un modelo en su carpeta asp.net mvc - model? Utilice estos modelos con sus vistas y utilizando una capa de servicio para "adaptar" mi modelo al modelo EF.asp.net mvc modelos vs entidad marco modelos

O ha utilizado otro enfoque. El problema con este enfoque es que la mayoría de las veces mi modelo (selfmade) es una copia del modelo EF (no seco)

Entonces, ¿alguien me puede explicar qué modelos usar con tu vista porque se está volviendo muy confuso? . modelo/viewmodel/Entityframeworkmodel ....

Solución:

Gracias por todas las respuestas supongo que estoy en este momento refactorizar algunas cosas!

Respuesta

22

El enfoque correcto es utilizar diferentes clases para ViewModel y diferentes para una persistencia (entidad). La razón habitual es que a menudo necesita enviar datos adicionales a una vista (por ejemplo, datos para llenar menús desplegables, datos para deshabilitar algunos campos, etc.), usar validación diferente o mostrar solo un subconjunto de una entidad.

No soy purista. Si veo que mi modelo de vista es exactamente igual a la entidad que uso la entidad directamente, refactorizaré el código una vez que necesite información adicional en la vista. La mayoría de las veces empiezo con entidades y termino con modelos de vista debido al desarrollo incremental.

+0

siguiendo este patrón, ¿qué convención de nomenclatura recomendaría? Los tutoriales de MVC le dicen que simplemente use la carpeta "modelos", pegue sus modelos de marcos de entidad y suponga que serán los mismos que sus modelos de vista (que, como sabemos, a menudo no es el caso). – Saturnix

3

Por lo general tengo mi Visualización de modelos en la carpeta Modelos, y mis modelos de dominio en la capa ORM.

Visualización de modelos (del nombre) son modelos normales de esos objetos sólo se necesita para ayudar al proceso de visualización, que no tienen persistencia alguna y que puede contener algo de lógica.

Si enfrenta el problema de que sus Modelos de Dominio coinciden con sus Modelos de Vista, entonces puede necesitar rediseñar los modelos O simplemente usar los Modelos de Dominio sin un hombre en el medio.

1

En cuanto a mí, prefiero eliminar la carpeta Models en la estructura MVC estándar y agregar la carpeta ViewModels donde almaceno todos los modelos de vista. Como Ladislav mencionó en las primeras iteraciones, esos modelos de vista podrían ser una copia exacta de la entidad de su modelo de Dominio, pero de manera creciente crecerán y diferirán mucho.

+0

¿Cuál es el significado de la carpeta viewModels en lugar de modelos? – DavidB

+0

Ninguno. Pero de esta forma puede ver que los objetos del modelo 'ver' se guardan allí y no los objetos del modelo 'comercial'. Todo depende de las preferencias personales :) –

+0

Ya veo, eso tiene sentido ahora. Gracias por la respuesta. – DavidB

1

Bueno, no tiene sentido. Solía ​​luchar con esto, creo que necesitas un modelo que no sea la entidad de tabla, llamé a este modelo de dominio. La razón de esto es a veces si está utilizando el linq2sql, luego tiene que lidiar con la tabla de puenteo/enlace (que no es la entidad real) y el cálculo complejo, por lo que no puede hacerlo en su entidad de tabla, derecha ? Entonces mi enfoque es tener ViewModel < -> Modelo < -> Entidad

Cuestiones relacionadas