図1 クリーンアーキテクチャの有名な図
クリーンアーキテクチャは Robert C. Martin( 通称ボブおじさん ) によって提唱されたアーキテクチャパターンです。 クリーンアーキテクチャはあるシステムの1機能を実現するアプリケーションを考えるとき、その実現する機能の領域(ドメイン)と技術の詳細に注目し、アプリケーションを4つの層に分けます。
発表時はだいぶ駆け足になってしまったので各層の役割を改めて紹介します。
でも正直 '自分の使用している言語' clean architecture
とかで調べて、出てきた記事を見た方がしっくりくると思います。
以降の説明で使用するサンプルは以下のものです。 Dart 及び Flutter で作成したので、実行する場合は環境構築が必要です。 また Qiita の API を使用しているので Qiita のアクセストークンが必要です。用意した上で README を参照してセットアップを行ってください。
hayabusabusa/flutter_clean_architecture_sample
Entity は処理の方法に依存しない( どんな処理がされるのかは知らない )データ構造やメソッドの集合体となります。外側の層には依存しないため、Use Case や他の層によってどのように使われるかを気にしません。 つまり複数アプリケーションで共有可能で、外部変化( 機能追加など )による影響がないものだけが存在することになります。
UseCase は Entity を使ってアプリケーション固有のビジネスロジックを実現します。 また、Use Case 層には**入出力のための出入口(ポート)**は存在しますが、そのポートにどのような経路から入力があって、どこへ出力するのかは知りま せん。
Interface Adapter は円の内外に合わせてデータやイベントを変換するためのレイヤーです。 Entity を UI で表示するようのデータに変換したり 内側と外側のレイヤーとを繋ぐ役割をこなします。Presenter や Repository( Gateway ) と言ったものがこの層に属します。
Presenter は UseCase で取得したデータを View( UI ) に伝えたり、逆に View からイベントの通知を受け取り UseCase に伝える、View( UI ) と UseCase を繋ぐ役割をこなします。