Actualmente estoy jugando con el framework Asp.Net mvc y me encanta comparado con el clásico estilo asp.net. Una cosa que estoy discutiendo es si es o no aceptable que una Vista cause (indirectamente) acceso a la base de datos.ASP.Net Mvc - ¿Es aceptable que la Vista llame a funciones que pueden provocar la recuperación de datos?
Por ejemplo, estoy usando el controlador para completar una clase de datos personalizada con toda la información que creo que la vista necesita para hacer su trabajo, sin embargo, como paso objetos a la vista también puede causar lecturas de base de datos.
Un pseudo ejemplo rápido.
public interface IProduct
{
/* Some Members */
/* Some Methods */
decimal GetDiscount();
}
public class Product : IProduct
{
public decimal GetDiscount(){ ... /* causes database access */ }
}
Si la vista tiene acceso a la clase de producto (que se pasa un objeto IProducto), se puede llamar GetDiscount() y acceso a la base de datos causa.
Estoy pensando en maneras de evitar esto. Actualmente, solo estoy obteniendo herencia de interfaz múltiple para la clase Product
. En lugar de implementar solo IProduct, ahora implementaría IProduct
y . IProductView enumeraría los miembros de la clase, IProduct contendría las llamadas al método que podrían causar acceso a la base de datos.
La 'Ver' solo conocerá la interfaz en la clase y no podrá llamar a los métodos que provocan el acceso a los datos.
Tengo otros pensamientos vagos acerca de "bloquear" un objeto antes de que se pase a la vista, pero puedo prever un gran alcance para los efectos secundarios con dicho método.
lo tanto, mi pregunta:
- ¿Hay algún mejores prácticas con respecto a este tema?
- ¿Cómo otras personas que usan MVC detienen la Vista y hacen más cosas de lo que deberían?
Quiero proporcionar datos precocinados listos para la vista, eso es lo que estoy haciendo en el controlador (uso constructores para crear mis clases de modelos de vista), yo (quizás prematuramente) quiero atender situaciones en el futuro en las que pueda querer todo el acceso a db en una transacción, por ejemplo, no es fácil de controlar en una vista. – Ash
No se requiere servicio de catering para estos datos listos para hornear (lo siento, por el terrible juego de palabras ;-))). Su vista no necesita estar al tanto de nada, solo consume el objeto modelo. Depende del controlador y el modelo negociar transacciones, etc. más adelante si es necesario. –