クリーンアーキテクチャ - 1m-llc/Flutter-KtoK GitHub Wiki
作成中
-
依存性は内側だけに向かっていかなければいけない
円 注釈 役割 説明 ex. Entities Enterprise Business Rules 企業全体のビジネスルールをカプセル化 企業全体の最重要ビジネスルールをカプセル化したものです。メソッドを持ったオブジェクトでも、データ構造や関数でも構いません。
ex.
商品情報:特価の商品か判断する
ユーザ情報:○企業に属するか判断Use Cases Application Business Rules アプリケーション固有のビジネスルールをカプセル化 「アプリケーション固有」のビジネスルールが含まれています。エンティティとのデータの流れを組み立てます。
ex.
キーワードから商品を検索するユースケース
ユーザ情報を登録するユースケースControllers
Presenters
GatewaysInterface Adapters 内外へのデータ変換 外部から、ユースケースとエンティティーで使われる内部形式にデータを変換、または内部から外部の機能にもっとも便利な形式に、データを変換する Adapter です。
ex.
外→内:MVCのController
内→外:MVCのViewWeb
UI
External Interfaces
DB
DevicesFrameworks & Drivers DBやフレームワークの詳細 クライアントからの入力を受け付けたり、クライアントへの出力を行ったり、データベースのような外部機能に接続したりと、外界とアプリケーションの内側をつなぐ役割を担います。特定のフレームワークやドライバー等に依存するので、このレイヤーに関する知識は Interface Adapters より内側に入らないよう注意します。
ex.
DBへの接続設定
Webフレームワークの設定
Clean Architecture とはあくまでもアプリケーション固有のデータ構造やビジネスルールが、外側の特定のフレームワークやドライバー等に依存しないために、「アプリケーションの内側に外側を依存させようという概念」のことであり、具体的なレイヤー(ディレクトリ階層)を決めるものではありません。
-
内側の変化に応じて外側を呼び出したい場合
-
Clean Architecture の良いところ
- フレームワークからの独立
- データベースからの独立
- UIからの独立
- テスト可能
-
Clean Architecture の悪いところ
- ソースコードのファイルが増える
アプリケーションの内側(のレイヤー)に外側(のレイヤー)を依存させるため、 「DIP(依存関係逆転の原則)」に従って、実装していきます。 DIP とは Clean Architecture の実装の観点でわかりやすく言えば、あるレイヤーが自分より内側のレイヤーもしくは同じレイヤーの Interface を実装したり使用したりしていいが、その逆、つまり自分より外側のレイヤーの Interface を実装したり使用してはいけないということです。
ソフトウェアの拡張性、保守性等を担保し、メンテナンスしにくいプログラムになることを防ぐための原則です。
頭文字 | 略語 | 原則 | 説明 |
---|---|---|---|
S | SRP | 単一責任の原則 | クラスに任せる仕事は1つにするべきだ。 |
O | OCP | 開放閉鎖の原則 | ソフトウェアのエンティティ(クラス、モジュール、関数)は拡張に対して開き、修正に対して閉じていなければならない。 |
L | LSP | リスコフの置換原則 | サブクラスは、そのスーパークラスで代用可能でなければならない |
I | ISP | インタフェース分離の原則 | 顧客に特化した細粒度のインタフェースを作れ、顧客は自分たちが使わないインターフェースに依存することを強いられるべきではない |
D | DIP | 依存性逆転の原則 | 依存性は、具体化ではなく抽象化でなければならない。 A. 高水準モジュールは低水準モジュールに依存してはならない。両者は、抽象化に依存するべきである。 B. 抽象化は、詳細に依存してはならない。詳細は、抽象化に依存するべきである。 |
https://www.slideshare.net/AtsushiNakamura4/clean-architecture-release
https://www.slideshare.net/monotaro-itd-pr/ss-150331504
API サーバーを Clean Architecture で構築する
https://tech-blog.optim.co.jp/entry/2019/01/29/173000