Soy relativamente nuevo en MVC, por lo que esta es una pregunta novata.Modelos específicos de vista en ASP.NET MVC?
Estoy tratando de comprender las mejores prácticas para mantener una clara separación de las preocupaciones en unos pocos escenarios que no aparecen directamente.
Hay dos escenarios que estoy viendo en este momento. Imagine una aplicación muy básica que permite a los usuarios ver y editar perfiles en línea para abogados. Hay una acción/vista para mostrar el perfil de un usuario en particular y una acción/vista para editar el perfil de un usuario en particular. Es fácil imaginar una clase Model agradable y limpia para representar los detalles del perfil de un usuario, tal vez realizada con Entity Framework y asignada a la tabla SQL del perfil de usuario.
En la vista de acción/vista para mostrar el perfil de un usuario, funcionalmente, necesito tener un botón o enlace que permita a un usuario editar el perfil. Pero eso solo debería estar disponible para algunos subconjuntos de usuarios. Por ejemplo, el usuario puede editar su propio perfil. Además, los superusuarios pueden editar el perfil de cualquier persona. Mi pregunta es cómo debería la Vista decidir si el enlace debería estar allí cuando se renderiza un perfil en particular. Supongo que es incorrecto que la Vista contenga la lógica para determinar si el usuario actual puede editar el perfil actual. ¿Debo agregar una propiedad IsEditable a la clase de modelo UserProfile? Eso no parece trágico, pero tampoco se siente completamente bien. ¿Debo hacer una nueva clase de modelo que agregue el perfil de usuario con información adicional sobre seguridad?
Otro escenario ... Al editar un perfil en particular, una de las cosas editable es la lista de especialidades para un abogado en particular. La lista de posibles especialidades no es fija. Si la vista desea renderizarlos en cuadro combinado, necesita la lista de todas las especialidades posibles de la base de datos. La vista no debería obtenerlos directamente de la base de datos, entonces ¿vuelvo a hacer el ejemplo agregado y le doy a View tanto el perfil de usuario como una lista de especialidades válidas?
Creo que el problema genérico que estoy tratando de resolver es si me siento cómodo con la creación de muchas pequeñas clases de modelos que son esencialmente específicas para vistas individuales. Cada clase incluiría las diversas partes no relacionadas del modelo de dominio más grande que se necesita para esa vista en particular.