api
SpringBoot
CleanArchitecture
106
どのような問題がありますか?

この記事は最終更新日から1年以上が経過しています。

投稿日

更新日

Spring Bootで実装するWebAPIのアーキテクチャを考える

Spring Boot + MySQLでシンプルなWeb REST APIサーバを実装する - Qiita

Outline

Spring bootを使ったWebAPIのアーキテクチャ、クラス設計を考える。
Springの思想?に則り、3層アーキテクチャを採用する。

3層アーキテクチャ

以下のような3層を定義する。

各層の役割

  • アプリケーション層
    • UI
    • クライアントとの入出力とビジネスロジックをつなぐ
  • ドメイン層
    • ビジネスロジック
    • ドメインを表現するオブジェクト、手続きたち
  • インフラ層
    • 永続化の実装
    • 他サービスとの通信等の実装

基本的なルール

以下を定義する

  • ドメイン層は、他の層に依存してはならない
  • アプリケーション層、インフラ層はドメイン層に依存して良い

このルールにより以下のような成果物となる

  • ビジネスロジックが明確になる
  • UIからロジックが独立する
  • 永続化(ストア)の実装からロジックが独立する
  • テスタブル

パッケージ構成

.
├── SpringApiApplication.java
├── application
│   ├── controller
│   │   ├── ControllerExceptionHandler.java
│   │   └── UserController.java
│   └── resource
│       ├── ErrorResponse.java
│       └── UserBody.java
├── domain
│   ├── exception
│   │   └── NotFoundException.java
│   ├── object
│   │   └── User.java
│   ├── repository
│   │   └── UserRepository.java
│   └── service
│       └── UserService.java
├── infrastructure
│   ├── entity
│   │   └── UserEntity.java
│   └── repository
│       ├── UserJpaRepository.java
│       └── UserRepositoryImpl.java

各パッケージの解説

Application層

Resource

リクエストやレスポンスのオブジェクト

Controller

入出力とサービスのマッピングをする

Domain層

Domain Object

ビジネスを行う上で必要なモデルを表現するオブジェクト

Service

ビジネスロジック本体

Repository Interface

Infrastructure Layerとのインタフェース
依存関係逆転の原則ってやつ

Exception

Exceptionたち

Infrastructure層

Entity

通信時の構造体を表現するオブジェクト

Repository Implement

Repository Interfaceの実装。

ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
ユーザー登録ログイン
YutaKase6

コメント

この記事にコメントはありません。
あなたもコメントしてみませんか :)
ユーザー登録
すでにアカウントを持っている方はログイン
記事投稿イベント開催中
React 18、あなたならどう使いこなす?
~
Claris FileMaker で作った App を JavaScript で拡張したらどうなる?!
~
106
どのような問題がありますか?
ユーザー登録して、Qiitaをもっと便利に使ってみませんか

この機能を利用するにはログインする必要があります。ログインするとさらに下記の機能が使えます。

  1. ユーザーやタグのフォロー機能であなたにマッチした記事をお届け
  2. ストック機能で便利な情報を後から効率的に読み返せる
ユーザー登録ログイン
ストックするカテゴリー