В настоящее время я играю с фреймворком Asp.Net mvc и люблю его по сравнению с классическим способом asp.net. Одна вещь, которую я обсуждаю, это то, допустимо ли для View вызывать (косвенно) доступ к базе данных?
Например, я использую контроллер, чтобы заполнить пользовательский класс данных всей информацией, которая, по моему мнению, должна выполнять свое представление для представления, однако, поскольку я передаю объекты в представление, это также может вызвать чтение базы данных. 1003 *
Быстрый псевдо-пример.
public interface IProduct
{
/* Some Members */
/* Some Methods */
decimal GetDiscount();
}
public class Product : IProduct
{
public decimal GetDiscount(){ ... /* causes database access */ }
}
Если представление имеет доступ к классу Product (ему передается объект IProduct), оно может вызвать GetDiscount () и вызвать доступ к базе данных.
Я думаю о способах предотвратить это. В настоящее время я рассматриваю только наследование нескольких интерфейсов для класса Product
. Вместо реализации только IProduct теперь будут реализованы IProduct
и IProductView
. IProductView будет перечислять членов класса, IProduct будет содержать вызовы методов, которые могут вызвать доступ к базе данных.
«Представление» будет знать только об интерфейсе IProductView
класса и не сможет вызывать методы, вызывающие доступ к данным.
У меня есть другие смутные мысли о «блокировке» объекта перед его передачей в представление, но я могу предвидеть огромные возможности для побочных эффектов с помощью такого метода.
Итак, мои вопросы:
- Есть ли лучшие практики по этому вопросу?
- Как другие люди, использующие MVC, не допускают, чтобы View был непослушным и делал с объектами больше, чем следовало бы?