私は、春と休止状態を使用してRESTfulサービスを書いています。私はインターネットで多くのリソースを読みましたが、彼らは私の疑問を明確にしませんでした。 DAO、DTOおよびServiceの春のフレームワークのレイヤーとは何ですか?そして、RESTfull APIサービスを開発するためにこれらのレイヤーを春に使用する必要がある理由。
まず、これらの概念は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 もあります。
永続化メカニズムなどのすべてのデータベース操作を実行するための共通インターフェースを提供するオブジェクト。
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
メソッド呼び出しの回数を減らすためにプロセス間でデータを運ぶオブジェクトは、サービス層で複数のPOJOエンティティを結合することを意味します。
たとえば、GET要求/rest/customer/101/orders
は、顧客ID 101
のすべての注文を顧客の詳細とともに取得するため、エンティティCustomer
およびエンティティOrders
を詳細と組み合わせる必要があります。
エンタープライズアプリケーションは、メンテナンスと開発を容易にするために階層に分割されています。層は、次のような特定のタイプのタスク専用です
この設計の理由: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は、懸念の分離にも使用されます。
サービスレイヤー:
コントローラ層からリクエストを受信し、パーシスタンス層へのリクエストを処理します
DTO:
これは、サービス層から永続層にプロパティを渡すために使用されるデータ転送オブジェクトです。
DAO:
これはデータアクセスオブジェクトです。永続層とも呼ばれます。このDAOでは、DTOオブジェクトのサービスレイヤーからプロパティ値を受け取ります。ここで、永続ロジックをdbに書き込みます。