SpringフレームワークのDAOとサービスレイヤーとは正確には何ですか?
理論的な答えを探しています。
Springに関する限り、区別はありません。慣例により、DAOクラスをでマークし@Repository
、サービスをでマークすることができます@Service
。また、前者は永続層の例外変換を行います。
理論的に質問しているので、DAOは生のデータベース操作を実行し、それらをいくつかのより高いレベルの構成(オブジェクト、コレクション)に変換する必要があります。サービスはDAOを呼び出し、ビジネスオペレーションを実行する必要があります。通常、トランザクションの境界設定は、複数のDAO呼び出しにまたがるサービスレイヤーで実行されます。
最後に、DAOは永続性の詳細からビジネスロジックを抽象化する必要があります。理想的には、ビジネスロジック(サービス)を変更せずに永続性レイヤーを切り替えることができます。永続性プロバイダーの抽象化がリークしているため(遅延読み込みなど)、これはほとんど不可能です。
DAO-データアクセスオブジェクトは、データストレージ(通常はデータベース)への接続を処理するためのオブジェクトです。ここにクエリがあり、DAOがサービスにデータを提供します。
サービスにはすべてのロジックが含まれている必要があります。ロジックを分離している場合は、理論的には、影響を受けることなくUIレイヤーまたはDAOレイヤーを変更できます。
DAO(データアクセスオブジェクト)は、データベース上のテーブルごとにクラスを作成することで構成されるデザインパターンであり、オブジェクトの永続性とデータアクセスロジックを分離するための手法を提供します。