Webアプリケーション開発でよく使用される3層アーキテクチャについて、Spring Bootでの実装とともに説明してきます。今回は従業員管理システムの実装を例に話を進めていきます。Spring BootでWebアプリ開発を始めたばかりの方の参考になれば幸いです。
記事の構成
前半で3層アーキテクチャの基本を図解し、後半でSpring Bootでの3層アーキテクチャの実装を紹介します。
1. 3層アーキテクチャ
全体像をつかむ
3層アーキテクチャの基本
3層アーキテクチャはプレゼンテーション層、ビジネスロジック層、データアクセス層(データ層)の3層からなるアーキテクチャです。
① プレゼンテーション層
- クライアントから受け取ったHTTPリクエストを処理し、ビジネスロジック層に渡す
- JSONをDTOに、DTOをJSONに変換 (Jacksonというライブラリを使用)
- HTTPレスポンスをクライアントに返す
② ビジネスロジック層
- プレゼンテーション層とデータアクセス層の仲介役として、クライアントにデータが返される前に、またはデータベースにデータが保存される前に、データ処理を行う
- ユーザーが入力したデータがアプリケーションの条件を満たすかどうか確認する。例えば、従業員のメールアドレスが正しいか、ユーザーの年齢が18歳以上か等をチェックする
- プレゼンテーション層に処理結果を返す
- データアクセス層とやりとりしてデータを取得・保存する
③ データアクセス層
- データベースに対してCRUD操作を行う
一連の流れを図で理解してみる
- クライアント(今回はPostmanを使用)が、ID:70の従業員のデータを取得するためHTTP GETリクエストを送信
- プレゼンテーション層でHTTPリクエストを処理し、ビジネスロジック層に渡す
- 必要に応じて、ビジネスロジック層で上に示したような処理を行う
- データアクセス層でID:70の従業員のデータをDBから取得する
- 逆の処理が行われ、クライアントが従業員のデータをJSON形式で取得する
2. 実装
このアーキテクチャをSpring Bootで実装する際、通常それぞれの層の役割を担うクラスを該当するパッケージ内でまとめます。
- プレゼンテーション層 - Controllerパッケージ > Controllerクラス
- ビジネスロジック層 - Serviceパッケージ > Serviceクラス
- データアクセス層 - Repositoryパッケージ > Repostitoryクラス
プレゼンテーション層(Controllerパッケージ)
- Controllerパッケージ内のクラスには@RestController または @Controllerアノテーションを付与する
- 通常、これらのアノテーションが付与されたControllerクラス内でSerivceクラスを呼ぶ
ビジネスロジック層(Serviceパッケージ)
- Serviceパッケージ内のクラスには、@Serviceアノテーションを使用する
- Serviceクラス内で、Repositoryクラスを呼ぶことがある
データアクセス層(Repositoryパッケージ)
- Repositoryパッケージ内のクラスには、@Repositoryアノテーションを付与することがある
- JpaRepositoryインターフェイスを継承した独自のインターフェイスを定義することで、基本的なCRUD操作が可能
- 今回の例では、JpaRepository<Employee, Long>を継承するEmployeeRepositoryインターフェイスを定義することで、Employeeエンティティに対してCRUD操作を行うことができる。JpaRepository<Employee, Long>では、Employeeエンティティの主キーのデータ型Longを指定している
まとめ
今回のSpring Bootによる3層アーキテクチャの全体像を示します。
参照
日本語
英語
YouTubeで分かりやすいと思ったTeddy Smithさんの動画