Największe powody, dla których skłaniam się ku warstwie usług, to z dwóch następujących powodów...
-
Oznaczenie metod jako @Transactional, aby wszystkie żądania DAO wewnątrz tej metody odbywały się w ramach jednej transakcji.
-
Mogę zwiększyć oddzielenie troski od DAO i ról użytkownika. Mogę oznaczyć metody jako wymagające określonych ról użytkownika i jako takie bardzo dobrze pasuje do Spring Security.
Możesz po prostu wywołać DAO z kontrolera, ale utkniesz, jeśli chcesz później rozwinąć. Aby uzyskać połączenie, możesz użyć oznaczenia usługi jako @Transactional, a DAO jako @Repository, a Spring zajmie się całym pobraniem obiektu sesji i wstrzyknięciem itp.
Mam tendencję do myślenia (może niepoprawnie) o warstwie usług jako fasadzie, do której uzyskuje się dostęp, czy to z usługi internetowej, kontrolera lub czegokolwiek, zachowuje separację.