Widziałem wiele konfiguracji utrwalania informacji w bazie danych. Zasadniczo w moim zakątku świata wydają się popularne trzy typy projektów:
- Kontroler zarządza trwałością
- Model zarządza trwałością
- Biblioteka stron trzecich zarządza trwałością, zwykle wymagając pewnego rodzaju adnotacji w modelu.
Zastanawiam się, która konfiguracja (jeśli w ogóle) jest koncepcyjnie najłatwiejsza w użyciu / najbardziej kompatybilna z architekturą MVC?
(Jeśli nie wymieniłem go na liście, proszę podać krótki zarys / przegląd jako część odpowiedzi)
Realistycznie MVC to głównie wzór implementacji interfejsu użytkownika, więc pytanie jest nieco dyskusyjne. Są jednak tak naprawdę tylko dwie duże opcje. Kontroler zazwyczaj wysyła żądania załadowania lub zapisania encji w modelu za pomocą 1) jakiejś warstwy usługi lub 2) wzorca Active Record.
Warstwa usługi może przybierać dowolną liczbę form, choć osobiście wolę pracę z abstrakcją repozytorium dla agregowanych jednostek głównych, których konkretne implementacje będą działać z jakimś ORM, lekkim DAO lub API dla niektórych nierelacyjnych sklepów, jeśli ma to sens dla aplikacji.
Wzorzec Active Record oznacza, że twój model jest odpowiedzialny za trwałość, chociaż zwykle oznacza to, że klasa podstawowa zarządza mapowaniami do twojego sklepu, więc twój model nie jest tak bezpośrednio zaangażowany.
Zasadniczo kontroler wysyła żądania utrwalania obiektów, niezależnie od tego, czy jest to wywołanie repozytorium, implementacja UnitOfWork, czy metoda Save na twoich jednostkach. Jeśli korzystasz z repozytoriów, obiekty modelu nie znają uporczywości.
źródło
W systemie MVC (model-view-controller) model zawiera dane. Uważam więc, że trwałość bazy danych powinna w tym być.
źródło
Większość próbek MVC wysokiego poziomu, które widziałem, ma osobną
infrastructure
warstwę, która zawiera rzeczywisty kod implementacji bazy danych (tj. Konkretne wywołania do NHibernate, EF lub Linq lub cokolwiek, na czym polega twoja warstwa danych), podczas gdy warstwa „modelowa” (często również warstwa „Domena”) ma interfejsy, które definiują usługi danych.źródło
Standardową praktyką w MVC jest uwzględnienie struktury danych i trwałości w warstwie M (odel).
Warstwa modelowa obejmuje nie tylko klasy (POCO itp.), Których będziesz używać w swojej aplikacji. Obejmują repozytoria tych klas.
Przykładem może być repozytorium, w którym znajdują się paczki instancji klas danych, tj .:
Będziesz mógł lepiej zorganizować domenę modelu, a także mieć dostęp do swoich danych na wiele sposobów, ale warstwa danych / modelu będzie zwarta i solidna
źródło