A warstwa logiki domenowej to będzie gdzie? Bo przecież nie w ORMowych klasach, bo te są związane ze strukturą bazy danych i nie ma to specjalnie sensu. Jak robisz CRUDa i logiki nie ma i tylko pchasz dane pomiędzy RESTem a SQLem to pewnie żadne repozytoria nie mają sensu. Ale jak robisz jakąś faktyczną aplikacje to nagle wygląda to trochę inaczej.
Trywialny przykład z życia wzięty: mam aplikacje która zarządza dostępem użytkowników do pewnych danych. Sama logika tam jest mocno złożona, ale jedno z wymagań jest takie, żeby admin mógł zrobić "override" dla wybranych danych dla wybranego użytkownika. Żeby to było trwałe to trzymamy sobie te override w bazie danych. Ale w samej logice domenowej aplikacji nie obchodzi mnie że np. user X ma 1000 takich override, szczególnie że dane mogłyby się tam zazębiać - interesuje mnie set
te wszystkimi dostępnymi dla tego usera danymi, żeby można było szybko zrobić set intersection i wybrać dostępne pliki. Więc mimo że w bazie trzymamy te override per request
(żeby można było np. któryś z nich usunąć), to wczytując to do aplikacji spłaszczamy to do mapy userId -> set<file>
. Gdybym z jakiegoś powodu miał tam ORMa, to ORMowe klasy odzwierciedlałyby strukturę tabel i musiałbym i tak przerobić to na mój model domenowy z moją mapą.
Inny przykład też z życia wzięty: aplikacja dostaje requesty z listą plików. Taki request zapisujemy sobie trwale żeby nam gdzie nie uciekł po restarcie. Na podstawie plików z requestu robimy pewne operacje i dobieramy do tych plików także inne powiązane, wyciągamy też różne inne metadane w styli rozmiary, prawa dostępu itd. I to co user widzi w aplikacji na froncie to już ta "rozwinięta lista". Widać wyraźnie, ze to co trzymamy w bazie, a to co trzymamy w warstwie logiki domenowej to są dwie zupełnie różne rzeczy! I znów, jakbym miał tam ORMa to ten ORM mi najwyzej wczyta tą początkową listę, ale załadowanie faktycznego obiektu domenowego
wymaga dużo więcej.
Zresztą co dopiero mówić o jakimś module raportowym
który robi jakieś analityczne query na bazie. Jakby nie patrzeć jest to data access layer
ale nijak sie ma do jakiegokolwiek mapowania relacji na obiekty ;)