web-dev-qa-db-ja.com

Spring FrameworkのDAO、DTO、およびサービス層とは何ですか?

私は、春と休止状態を使用してRESTfulサービスを書いています。私はインターネットで多くのリソースを読みましたが、彼らは私の疑問を明確にしませんでした。 DAODTOおよびServiceの春のフレームワークのレイヤーとは何ですか?そして、RESTfull APIサービスを開発するためにこれらのレイヤーを春に使用する必要がある理由。

39

まず、これらの概念はPlatform Agnosticであり、Spring Frameworkや他のフレームワークに限定されるものではありません。


データ転送オブジェクト

DTOは、プロセス間でデータを運ぶオブジェクトです。リモートインターフェイスを使用している場合、呼び出しごとに費用がかかります。その結果、呼び出しの数を減らす必要があります。解決策は、呼び出しのすべてのデータを保持できるData Transfer Objectを作成することです。接続を経由するには、serializableである必要があります。通常、サーバー側でアセンブラを使用して、DTOとドメインオブジェクト間でデータを転送します。多くの場合、フィールドとそれらのゲッターとセッターの束にすぎません。


データアクセスオブジェクト

Data Access Objectは、データソースへのすべてのアクセスを抽象化し、カプセル化します。 DAOは、データソースとの接続を管理して、データを取得および保存します。

DAOは、データソースを操作するために必要なアクセスメカニズムを実装します。データソースは、RDBMSなどの永続ストア、またはRESTまたはSOAPを介してアクセスされるビジネスサービスです。

DAOは、Serviceオブジェクトの基になるデータアクセス実装を抽象化して、データソースへの透過的なアクセスを可能にします。 Serviceは、データのロードおよびストア操作をDAOに委任します。


サービス

Serviceオブジェクトは、アプリケーションが作業しているドメインに対して実行する必要がある作業を実行しています。入力と保存されたデータに基づく計算、プレゼンテーションから入力されるデータの検証、およびプレゼンテーションから受信したコマンドに応じて、ディスパッチするデータソースロジックの正確な把握が含まれます。

Service Layerは、クライアントレイヤーとのインターフェースの観点から、アプリケーションの境界と利用可能な操作のセットを定義します。アプリケーションのビジネスロジックをカプセル化し、トランザクションを制御し、そのオペレーションの実装における応答を調整します。


推奨参考文献

Martin Fowlerには、共通のApplication Architecture Patternsという名前の Patterns of Enterprise Application Architecture という素晴らしい本があります。 Core J2EE Patterns もあります。

50
Ali Dehghani

DAO-データアクセスオブジェクト

永続化メカニズムなどのすべてのデータベース操作を実行するための共通インターフェースを提供するオブジェクト。

public interface GenericDao<T> {
  public T find(Class<T> entityClass, Object id);
  public void save(T entity);
  public T update(T entity);
  public void delete(T entity);
  public List<T> findAll(Class<T> entityClass);
}

この例を参照してください: Spring – DAO and Service layer

DTO-データ転送オブジェクト

メソッド呼び出しの回数を減らすためにプロセス間でデータを運ぶオブジェクトは、サービス層で複数のPOJOエンティティを結合することを意味します。

たとえば、GET要求/rest/customer/101/ordersは、顧客ID 101のすべての注文を顧客の詳細とともに取得するため、エンティティCustomerおよびエンティティOrdersを詳細と組み合わせる必要があります。

5
vels4j

エンタープライズアプリケーションは、メンテナンスと開発を容易にするために階層に分割されています。層は、次のような特定のタイプのタスク専用です

  • プレゼンテーション層(UI)
  • ビジネス層
  • データアクセス層(DAO、DTO)

この設計の理由:dbからデータを読み取り、その上でいくつかのビジネスロジックを実行し、それをユーザーに提示するアプリケーションがある例を選択しましょう。 DBを変更する場合、以前のアプリケーションがOracleで実行されていたとしましょう。mysqlを使用するので、階層で開発しない場合は、アプリケーションのあらゆる場所で変更を行います。ただし、アプリケーションにDAOを実装する場合、これは簡単に実行できます。

DAO:データアクセスオブジェクトは、サービスレイヤーのデータにアクセスするためのインターフェイスを提供し、さまざまなデータソース(データベース、ファイルシステム)にさまざまな実装を提供する設計パターンです。

サンプルコード:

public interface DaoService {
    public boolean create(Object record);
    public CustomerTemp findTmp(String id);
    public Customer find(String id);
    public List getAllTmp();
    public List getAll();
    public boolean update(Object record);
    public boolean delete(Object record);   
    public User getUser(String email);
    public boolean addUser(User user);
}

Daoを使用したサービスレイヤー

@Service("checkerService")
public class CheckerServiceImpl implements CheckerService{

@Autowired
@Qualifier("customerService")
private DaoService daoService;

これで、DaoServiceインターフェースの実装を提供できます。サービスとDTOは、懸念の分離にも使用されます。

4
gajendra kumar

サービスレイヤー:

コントローラ層からリクエストを受信し、パーシスタンス層へのリクエストを処理します

  • @Controller:コントローラー層全体を初期化するアノテーションです。
  • @Service:サービス層全体を初期化するアノテーションです。
  • @Repository:永続層全体を初期化するアノテーションです。

DTO:

これは、サービス層から永続層にプロパティを渡すために使用されるデータ転送オブジェクトです。

DAO:

これはデータアクセスオブジェクトです。永続層とも呼ばれます。このDAOでは、DTOオブジェクトのサービスレイヤーからプロパティ値を受け取ります。ここで、永続ロジックをdbに書き込みます。

0
Babu Babu