Mam kilka wątpliwości co do wzorców projektowych stosowanych w aplikacjach MVC, chcę się upewnić czy wszystko zrozumiałem i nie naczytałem się za dużo herezji.
Wydaje mi się że dobrze podzielić projekt na warstwy:
- Model - klasy reprezentujące dane, na których oparta jest aplikacja
- DAL - context oraz ewentualnie initializer
- Repozytorium - tutaj nasuwa mi się pierwsze pytanie, niejednokrotnie @somekind nazwał stosowanie generycznych repozytorium jako antywzorzec (zgadzam się z tym w 100%), ale czy abstrakcyjną klasę implementującą podstawowe operacje CRUD zwracająca IEnumerable też się do tego zalicza?
- UoW - z tego co zrozumiałem, głównym zadaniem UoW jest zapewnienie wspólnego contextu dla wszystkich repozytorium? Przykładowy UoW powinien wyglądać tak:
public UoW
{
DbContext db = null;
public UoW(DbContext context)
{
db = context;
}
private FirstRepo _firstRepo = null;
public FirstRepo FirstRepo
{
get
{
if (_firstRepo == null) _firstRepo = new FirstRepo(db);
return _firstRepo;
}
}
// itd dla innych repo?
public void Save()
{
db.SaveChanges();
}
}
Mam rację?
4) Usługi - korzysta z UoW (poszczególnych jego właściwości - repozytoriów), tutaj znajdują się ViewModels? Pobierają zadanie od kontrolera, wykonują poszczególne operacje i zwracają ViewModels?
5) Kontroler
6) View
Chciałbym się upewnić czy taki podział aplikacji jest dobry, czy dobrze rozumiem zadania poszczególnych warstw i czy można podzielić to lepiej? Być może zrezygnować z któreś warstwy/warstw na rzecz innego rozwiązania?