Wzorzec Repozytorium (Repository) wprowadza warstwę pośrednią między logiką aplikacji a źródłem danych, np. bazą. Udostępnia metody w rodzaju znajdzPoId() czy zapisz(), a szczegóły zapytań SQL lub użytego ORM-a pozostają ukryte wewnątrz.
Jak to wygląda?
Aplikacja korzysta z interfejsu ArtykulRepozytorium, a jego implementacja może używać MySQL, pliku JSON lub zewnętrznego API. Logika biznesowa nie wie, skąd pochodzą dane, więc łatwo podmienić źródło lub wstawić wersję w pamięci na potrzeby testów.
Zalety
Rozdziela odpowiedzialności, porządkuje zapytania w jednym miejscu i upraszcza testy jednostkowe. Dobrze pasuje do architektury warstwowej i podejścia Domain-Driven Design.
Kiedy to przesada?
W prostych aplikacjach CRUD, gdzie ORM już zapewnia wygodny dostęp, dodatkowa warstwa bywa zbędna i tylko kopiuje metody. Warto ją wprowadzać, gdy zapytania są złożone lub źródło danych może się zmienić.
Repozytorium a Active Record
W Active Record obiekt sam wie, jak się zapisać w bazie, a w Repozytorium za dostęp do danych odpowiada osobna klasa. Pierwsze podejście jest szybsze w prostych aplikacjach, drugie lepiej sprawdza się, gdy logika biznesowa ma być niezależna od bazy. Wybór wynika ze skali projektu, a nie z mody.
Powiązane pojęcia
Wszystkie hasła z kategorii Programowanie i wzorce projektowe