To kiedy powinno się stosować Repository Pattern?
Generalnie wtedy, i tylko wtedy, gdy masz DDD i naprawdę tego DDD potrzebujesz.
Przy czym większość aplikacji nie potrzebuje DDD (a przynajmniej nie całość aplikacji), i większość aplikacji nie powstaje zgodnie z DDD - nawet jeśli ich twórcy tak twierdzą.
Przecież i stosowanie repozytoriów i ORM oddziela warstwę biznesową od źródła danych?
No nie do końca. Repozytoria oddzielają ją logicznie - to abstrakcja na potrzeby logiki biznesowej, biznesowo zdefiniowane API do operowania na kolekcjach encji (a konkretnie aggregation rootów). W repozytorium i tak potrzebujesz czegoś, co będzie operowało na bazie danych - może to być ORM, może to być biblioteka oparta o inny wzorzec, a może to być wywoływanie poleceń SQL i parsowanie ich wyników.
Sam ORM zaś nie tyle oddziela, co łączy świat obiektowy z bazą danych. Nie jest jedynym rozwiązaniem, ale w 99% przypadków jest najwygodniejszy do użycia przez programistę, bo znacznie przyspiesza czas tworzenia aplikacji.
Moja baza nie będzie miała dużo liczenia. Gra w szachy. Baza to będzie baza użytkowników + historia ich gry, kroków. Więc będą to niegroźne zapytania. Ale tak jak pisałem (chyba), piszę tą grę w celach edukacyjnych, dlatego interesuje mnie wiele wariantów a nie tylko "w twoim przypadku, użyj tego i zapomnij. będzie działać".
Skoro to o cel edukacyjny chodzi, to napisz raz z użyciem ORMa, a raz bez i porównaj czas, który na to poświęciłeś. :)
Czy faktycznie EF albo NHibernate jest tak popularne w aplikacjach serwerowych. Bo np. w wielu wymaganiach o prace są wylistowane.
Tak, są. Przy czym EF jest jakieś 20 razy popularniejsze od NH.
ORMów nie używają tylko:
- JanuszSofty;
- dziadki, które wpychają logikę do bazy danych, bo "tak jest wydajniej";
- oraz projekty, w których ORMy nie mają sensu, bo np. w bazie jest mała i stała liczba tabel, albo wydajność operacji jest dużo ważniejsza niż czas tworzenia aplikacji.