SpringMVC の 3 層アーキテクチャ#
通常、Java SpringMVC のプロジェクト構造は 3 つのレイヤーに分かれています。下から上には、モデル層(データアクセス層)、コントローラ層(ロジックコントロール層)、ビュー層(ページ表示層)があります。モデル層は 2 つのレイヤーに分かれており、DAO 層とサービス層があります。MVC アーキテクチャのレイヤー分割の主な目的は、解耦です。レイヤー分割アーキテクチャの利点は、システムのメンテナンス性と拡張性の向上です。
Spring のようなフレームワークでは、(View / Web)レイヤーがコントローラ層(Controller)を呼び出し、コントローラ層がビジネス層(Service)を呼び出し、ビジネス層がデータアクセス層(Dao)を呼び出します。
サービス層:ビジネスロジックを実装するためのレイヤーです。DAO 層またはサービス層を呼び出し、データオブジェクト(DO)またはビジネスオブジェクト(BO)を返します。BO は通常、DO の変換と統合によって作成され、複数の DO のプロパティを含むことも、1 つの DO の一部のプロパティのみを含むこともあります。簡単のために、変換が必要ない場合、サービスは直接 DO を返すこともあります。外部呼び出し(HTTP、RPC)のメソッドもこのレイヤーにあります。外部呼び出しの場合、サービスは通常、外部呼び出しの返り値である DTO を BO に変換します。このレイヤーは、ビジネスロジックに特化しており、必要なデータベース操作はすべて DAO を介して実現されます。接続の取得、データベース接続のクローズ、トランザクションのロールバックなど、いくつかの複雑なロジックのビジネス処理は、サービス層に配置されます。
DAO 層:データベースへのアクセスとデータ操作を担当し、結果セットを取得した後、データを VO クラスオブジェクトに取り出してサービス層に返します。データ層は、直接データベースの読み書き操作を行い、データオブジェクト(DO)を返します。DO はデータベーステーブルと 1 対 1 の関係になります。Dao の役割は、データベースへのアクセスをカプセル化することです。追加、削除、更新、検索などの要件を満たすためのものであり、ビジネスロジックには関与しません。
コントローラ層:ユーザーからのリクエストを処理するためのレイヤーです。主に外部リクエストを処理します。サービス層を呼び出し、サービス層から返された BO / DO を DTO / VO に変換し、統一されたレスポンスオブジェクトとして呼び出し元に返します。データがフロントエンドテンプレートのレンダリングに使用される場合は、VO を返し、それ以外の場合は通常 DTO を返します。DTO または VO であるかどうかに関係なく、通常は BO / DO のデータを変換および統合します。
ビュー層:データの表示を担当するレイヤーです。
実際の開発では、DAO 層は自分自身の操作基準、つまり標準インターフェースを定義する必要があります。これは解耦合のためです。