2012-04-05 16 views

答えて

41

を分離するための技術を提供春に関係している。大会では、DAOクラスに@Repository、サービスにとマークすることができます。また、前者は、いくつかの永続化レイヤ例外変換を行います。

理論的に尋ねているので、DAOは未処理のデータベース操作を実行し、それらをいくつかの上位レベルの構造(オブジェクト、コレクション)に変換する必要があります。サービスはDAOを呼び出し、ビジネス操作を実行する必要があります。通常、トランザクション境界はサービスレイヤー上で複数のDAO呼び出しにまたがるように実行されます。

最後に、DAOはビジネスロジックをパーシスタンスの詳細から抽象化し、ビジネスロジック(サービス)の変更を行わずにパーシスタンスレイヤーを切り替えることが理想的です。持続性プロバイダの抽象化が漏れているため(遅延ロードなど)、これはほとんど不可能です。

10

DAO - データアクセスオブジェクトは、データストレージ(典型的なデータベース)への接続を処理するオブジェクトです。ここではクエリがあり、DAOはデータをサービスに提供します。

サービスにはすべてのロジックが含まれている必要があります。あなたが理論的には、あなたがそれに影響を与えないであなたのUIレイヤーまたはDAOレイヤーを変更することができます。

4

DAO(データアクセスオブジェクト)、データベース上の各テーブルのクラスを作成する上で構成された設計パターンであり、それは何の区別は限りがありませんオブジェクトの永続化とデータアクセスロジック

0

この質問は、この質問に対する回答を知りたいと思う人々(私のような人)が依然として存在することから何年も経ちましたが、上記の回答に加えて、私が見つけたものを共有したいと思います。

多くの基本的なSpringベースのコードでは、Springラーナーのために書かれたデータはデータベースからのみ読み込まれ、読み取られます。 DAOはSessionFactoryを注入します。それから、同じことをしているようなサービスがあります。そして、新しい学習者は、なぜ私たちが2つの同様のインターフェースとクラスを持っているのか疑問に思っています。

しかし、現実世界のアプリケーションでは、他のパラレルタイプのデータストレージが存在する可能性があります(たとえば、1つのソートのデータをDBに格納し、ファイルに格納された他のタイプのデータやその他のストレージタイプを与えられた時点)。

この種のケースでは、コントローラクラスは多くの異なるタイプのインターフェイス(1つはDBやその他のファイルで作業するものなど)を注入する必要があります。また、同じデータソースを使用するモバイルアプリがある場合、モバイルアプリではさまざまな種類のデータソースも設定されます。

これを行う代わりに、サービスを使用する場合、コントローラクラス、モバイルアプリケーションなどはサービスのみを使用でき、サービスは何個のデータ持続性ソースでも機能します。

データの数や種類が変更された場合、すべての変更が影響を受けるDAOやサービスで行われるため、コントローラ、モバイルアプリなどは影響を受けません。サービス。

これはすべて、実行する作業の量を著しく減少させます。

よりよい設計などの設定を推奨していファサードデザインパターンがあります。あなたは、この偉大な記事でこの偉大なグラフィック表現を見ることができます

https://springframework.guru/gang-of-four-design-patterns/facade-pattern/

だから、一つのデータソースとの基本的な春ベースのアプリケーションにリアルタイムで唯一のWebアプリケーションのユーザー(コントローラ)によって使用されているが、 DAOとサービスのライフシナリオの違いが明らかになります。

これが役に立ちます。

関連する問題