Největší důvody, proč se přikláním k tomu, abychom měli vrstvu služeb, jsou z následujících dvou důvodů...
-
Označení metod jako @Transactional, takže všechny požadavky DAO v rámci této metody proběhnou v jediné transakci.
-
Mohu zvýšit oddělení zájmu od DAO a uživatelských rolí. Můžu označit metody jako vyžadující určité uživatelské role a jako takové to opravdu dobře sedí na Spring Security.
Můžete jednoduše zavolat DAO z ovladače, ale zůstanete uvízlí, pokud chcete později rozšířit. Chcete-li získat připojení, můžete použít označení služby jako @Transactional a DAO jako @Repository a Spring za vás obstará získání objektu relace a injekci atd.
Mám tendenci (možná nesprávně) uvažovat o vrstvě služeb jako o fasádě, ke které se přistupuje, ať už je to z webové služby nebo řadiče nebo čehokoli, udržuje oddělení.