私がサービス レイヤーを持つ傾向にある最大の理由は、次の 2 つの理由によるものです...
<オール> <リ>メソッドを @Transactional としてマークし、このメソッド内のすべての DAO リクエストが単一のトランザクションで行われるようにします。
<リ>DAO とユーザーの役割からの関心の分離を増やすことができます。特定のユーザー ロールを必要とするメソッドをマークできるので、Spring Security と非常に相性が良いです。
コントローラーから DAO を呼び出すことはできますが、後で拡張したい場合はスタックしたままになります。接続を取得するには、サービスを @Transactional としてマークし、DAO を @Repository としてマークすると、Spring がセッション オブジェクトの取得やインジェクションなどをすべて処理します。
私は、サービス レイヤーを、Web サービスやコントローラーなどからアクセスされるファサードとして考える傾向があります (おそらく間違っています)。