初めに
去年の現場で1年間、初めてJavaのSpring Bootを体験。
その際に、ただDB取得や業務処理を作成するだけではなく、これから紹介するWebのアーキテクチャの各役割を意識して、作成する必要があるということを学びました。
現場で作成をする中で学んだため、復習の意味も込めて、
今回、基本的な概念だけですが、共有いたします。
Webのアーキテクチャ 3層のイメージ図
各層の役割について
①Application Layer(アプリケーションレイヤー)
【Controller】の役割
・主にクライアントとサービスを繋ぐ処理を行う!
・クライアント側からまず呼ばれる層。
・クライアントからのリクエスト値を受け取り、【Service】に値を橋渡し、
最終的には【Service】から返ってきたレスポンス値をクライアント側に返す。
・バリデーションチェックなども行う。
②Domain Layer(サービスレイヤー)
【Service】の役割
・主に業務処理を行う!
・【Controller】側から渡された値に対して業務処理を行う役割。
・業務処理を実行した値を【Repository】に橋渡し、最終的に
【Repository】から返ってきたレスポンスを【Controller】側に返す。
・値の加工や計算処理や変換形などは、すべてここで業務処理として行う。
③ Infrastructure Layer(インフラストラクチャレイヤー)
【Repository】の役割
・主にDBに対してCRUD処理を行う!
・【Service】より受け取った値を元に、SQLにバインドさせ、DB処理を実施。
・MyBatisなどを用いて、CRUD後に結果として取得した返したいテーブルデータを、
テーブルモデルに設定して、【Service】側に返す。
まとめ
・これら3層に分けることにより、各層での適切な役割を行い、Webのアーキテクチャを保つことができます。
・これまでやってきている2案件ではJavaのSpring Bootではこれら3層のアーキテクチャに準じていたので、わりかしJava現場では覚えることは必須かと思われます。
・Spring Boot以外でもアーキテクチャとして考え方は、紹介されているサイトを見たことあるので使用されると思われます。
おわりに
これらのアーキテクチャごとの受け渡しやDB接続を行う際には、
以下の自動生成機能を用いることで、
【Repository】内でのデータモデル、SQLの自動生成、リクエストボディ、レスポンスの定義を作成可能です。(実際に現場でも使いました。)
・OpenAPI generator
(OpenAPIを用いて、リクエストとレスポンスやController内の呼び出し用のメソッドの自動生成)
・Mybatis Generator
(Repository内で使用するDBからのデータモデルや基本的なCRUDのSQLを定義したXMLの自動生成)
上記は現在学習中のため、6月中に実例とともに記事をあげます。