Obecnie odtwarzam z frameworkiem ASP.Net mvc i kocham go w porównaniu do klasycznego sposobu asp.net. Jedną z rzeczy, o którą się zastanawiam, jest to, czy dopuszczalne jest, aby widok powodował (pośrednio) dostęp do bazy danych?ASP.Net Mvc - Czy funkcja View może wywoływać funkcje, które mogą powodować pobieranie danych?
Na przykład używam kontrolera do zapełnienia niestandardowej klasy danych wszystkimi informacjami, które moim zdaniem View musi wykonać, aby wykonać swoją pracę, jednak podczas przesyłania obiektów do widoku może to spowodować odczytanie bazy danych.
Szybki pseudo przykład.
public interface IProduct
{
/* Some Members */
/* Some Methods */
decimal GetDiscount();
}
public class Product : IProduct
{
public decimal GetDiscount(){ ... /* causes database access */ }
}
Jeśli View ma dostęp do klasy o produkcie (to zostanie przeniesiony obiekt IProduct), można go nazwać GetDiscount() i dostęp do bazy danych przyczyna.
Zastanawiam się, jak temu zapobiec. Obecnie przechodzę do dziedziczenia z wieloma interfejsami dla klasy Product
. Zamiast implementacji tylko IProduct wdroży teraz IProduct
i . IProductView wyświetli listę członków klasy, IProduct będzie zawierać wywołania metod, które mogą spowodować dostęp do bazy danych.
"Widok" będzie znać tylko interfejs na klasie i nie będzie mógł wywoływać metod, które powodują dostęp do danych.
Mam inne niejasne przemyślenia na temat "blokowania" obiektu, zanim zostanie on przekazany do widoku, ale mogę przewidzieć ogromny zakres efektów ubocznych za pomocą takiej metody.
Więc moje pytania:
- czy są jakieś najlepsze praktyki dotyczące tej kwestii?
- W jaki sposób inne osoby korzystające z MVC powstrzymują widok jako niegrzeczny i robiąc więcej rzeczy niż powinny?
Chcę dostarczyć gotowe upieczone dane do widoku, to co robię w kontrolerze (używam budowniczych do tworzenia moich klas modeli widoków), ja (być może przedwcześnie) chcę zaspokoić sytuacje w przyszłości, gdzie mogę chcieć na przykład dostęp do db w transakcji - nie jest łatwo kontrolować w widoku! – Ash
Dla tych gotowych danych nie jest wymagane catering (przepraszam, za okropne kalambur ;-))). Twój widok nie musi być świadomy czegokolwiek - po prostu zużywa obiekt modelu. To zależy od kontrolera i modelu, aby negocjować transakcje itp. Później, jeśli/kiedy jest to wymagane. –