クリーンアーキテクチャの勉強
概要
現在、クリーンアーキテクチャを採用したアプリ開発を行っています。
ただクリーンアーキテクチャでアプリの開発をしたことが無いので、勉強した内容のアウトプットを兼ねて記事を作っていこうと思います。
今回は、用語や構成の概要のみを書いていこうと思っているので、実際の実装や詳細については書きません。
サイトや動画を見て、自分が理解した内容を書いていきます。
※勉強した内容を書いていくので、解釈が間違っている可能性があります。
※今後、内容を深掘りしていくので、随時修正していくと思います。
クリーンアーキテクチャのレイヤー
クリーンアーキテクチャで調べるとこの図がでよく出てきます。
この図は、要素の役割や依存関係を表しています。
青や緑で区切られている層について調べていきたいと思います。
Enterprise Business Rules(事業の業務ルール)
ビジネスロジック(業務上の処理等)を表現するオブジェクト(Entity)が所属するレイヤー。
たとえば商品(Product)などのものです。
Application Business Rules(アプリの業務ルール)
ソフトウェアが行う動作(usecase)を表現するレイヤー。
たとえば商品情報を取得するなどのアプリ上の処理があります。
Interface Adapters(境界のつなぎ)
usecaseとentityの業務的な空間から、
databaseやdevicesなどのアプリ的な空間に、
データを変換して渡してあげるレイヤー。
Frameworks&Drivers
フレームワーク(LaravelやSpringなど)やDB取得用のドライバーなどのレイヤー。
図の矢印は依存の方向を指しています。
アプリ的な空間にあるFrameworkなど→業務的な空間にあるEntityの方向に依存しており、その逆はありません。
なので、業務的な空間にあるEntityやusecaseには、FrameworkやDBなどの処理は存在してはいけません。
クリーンアーキテクチャの要素
DBやGatewaysなどの図に書かれている要素について、まとめていきます。
usecase
usecaseとは、アプリの中で行うビジネスルールをカプセル化したものです。
Entityを使用して、アプリ側の業務ルール(ユーザ登録など)を実行するものです。
Gateways
データを永続化させるためのものです。
DBにデータを保存などを実行します。
Repository(データ保存庫)はInterface AdaptersのGateWaysにあたります。
Presenter
表示するために値を加工するものです。
ビジネスロジックには、元となる値だけを入れておいて、
表示するときに値を加工します。
こうしないと、ビジネスロジックに表示ごとの新しい処理を書かなくてはいけなくなります。
Presenterは、UseCaseが出力する値を表示用に加工します。(ViewのためのViewModelを作成します。)
Interactor
usecaseはinterfaceで、その実装がInteractorになります。
Interactorでは、ビジネスロジックを書くのではなく、モデルの調整を実装するようにする。
Controller
データの入力を業務側のUseCaseに伝える役目があります。
アプリ側からの入力を変換して、業務側で使いやすいようにします。
その他
DIフレームワーク
プログラム起動時に、抽象クラスと具象クラスを紐付ける設定を行っている。
ひとこと
クリーンアーキテクチャについて調べて、簡単に書きました。
まだなんとなくこんなものなのかぐらいの理解なので、クリーンアーキテクチャで作られているアプリなど見て理解を深めていきたいです。
(正月ぐらいに、クリーンアーキテクチャの本でも読もうかなと思いました◯)
参考サイト:実装クリーンアーキテクチャ