SlideShare a Scribd company logo
Clean
Architecture
第Ⅴ部
アーキテクチャ Part4
前回まとめ
- 方針とレベル
- ソフトウェアシステムは方針を示したものである
- 方針は更に小さな方針に分割される
- どのような場合でも、下位レベルから上位レベルへ依存するように設計する
- ビジネスルール
- ビジネスルールとは、手動でもビジネスマネーを生み出したり節約したりするルールや手続きのこと
- 最重要ビジネスルール /最重要ビジネスデータ = エンティティ
- ユースケース = アプリケーション固有のビジネスルール
- 叫ぶアーキテクチャ
- 優れたアーキテクチャはドメイン、ユースケースを中心にしている
- FWは強力で便利だがアーキテクチャを乗っ取られてはいけない
- テストはフレームワークを使うことなく全てのユースケースのユニットテストを実行できる
- クリーンアーキテクチャ
- プレゼンターとHumble Object
第Ⅴ部:アーキテクチャ Part4
第1章:クリーンアーキテクチャ
- アーキテクチャのアイデア
- ヘクサゴナルアーキテクチャ
- DCIアーキテクチャ
- BCEアーキテクチャ
- レイヤードアーキテクチャ (勝手に記入)
- いづれも関心事の分離
- それぞれ、少なくともビジネスルールのレイヤーと、ユーザーやシステムとのインターフェイスと
なるレイヤーを持っている
- フレームワーク非依存
- アーキテクチャは FWの制約で縛るのではなく、 FWをツールとして利用する
- テスト可能
- ビジネスルールは、 UI/DBなど外部要素がなくてもテストできる
- UI非依存
- UIはシステムの他の部分を変更することなく、簡単に変更できる
- データベース非依存
- ビジネスルールは DBに束縛されないので、 MySQL/PostgreSQL 等いずれにも置き換えれる
- 外部エージェント非依存
- ビジネスルールは外界のインターフェイスについては何も知らない
第1章:クリーンアーキテクチャ
第ⅴ部:clean architecture アーキテクチャ Part4
第1章:クリーンアーキテクチャ
- 依存性のルール
- 最も重要なルールは「依存性のルール」
- 内側の上位レベルだけに向かっていなければいけない
- エンティティ
- 最重要ビジネスルールをカプセル化したもの
- メソッドを持ったオブジェクトでも、データ構造と関数でも
OK
- 企業にある様々なアプリケーションから使用できるなら、
エンティティは何でも構わない
- ユースケース
- アプリケーション固有のビジネスルールが含まれる
- エンティティに入出力するデータの流れを調節する
- ユースケースの目標を達成できるように、
エンティティに最重要ビジネスルールを
使用するように指示を出す
- インターフェイスアダプター
- 外部とのデータを相互変換するアダプター
- DBについては何も知らない
- DBがSQLであればこのレイヤーに限定する
- フレームワークとドライバ
- FWやツールで構成されている
- 通常このレイヤーにはコードをあまり書かない
- 書くとしても次のレイヤーとやりとりするグルーコード
第1章:境界線を越える
- 簡単にいうとDIPでレイヤーを保護
する
第1章:境界線を越えるデータ
- 境界線を越えるデータは、単純な構造で構成される
- 好みに応じて、オブジェクトやハッシュマップ
/単なる関数呼び出しにすることができる
- EntityやDBをそのまま渡すことはしない
- 依存性のルールに違反してもいけない
- DBデータをそのまま境界を超えて渡すと、円内側が円外側を知ってしまうことになる
第1章:典型的なシナリオ
- Humble Objectとはデザインパターンの1つである
- PresenterもHumble Objectパターンの一種
- テストしにくい振る舞いと、テストしやすい振る舞いを分離する
- 内容は非常にシンプル
- 一つのモジュールは「 Humble(控えめ)」
- もう一つは残りのテストしやすい振る舞い
- 通常UIのテストは難しい
- しかし、Humble ObjectパターンでPresenterとViewに分けてシンプルに
第二章:プレゼンターとHumble Object
第二章:プレゼンターとビュー
- ViewはHumble Object(控えめ)
- イベントと渡ってきたデータの表示のみ
- つまりデータの処理はない
- Presenterはテスト可能なオブジェクト
- appからデータを受け取り、 Presenter用で適切にフォーマットして ViewModelに配置
- PresenterにDataオブジェクトを渡して、画面に日付を表示させる
- PresenterにCurrencyオブジェクトを渡して、適切な桁数と通過記号をつけてフォーマットする
- ボタンをグレーアウトする必要があれば、 PresenterがViewModelに適切なフラグを設定する
- 画面に表示するもの、 appが制御するものは全て、 ViewModelに含まれる文字列・真偽地・列挙型と
して表現する
第二章:テストとアーキテクチャ
- テスト容易性が優れたアーキテクチャの特性
- Humble Objectはその好例
- 振る舞いをテストしやすい部分と、そうでない部分を分割することが、アーキテクチャの境界の
定義につながり、PresenterとViewもそうした境界の1つ
- だが、他にも境界は存在する
第二章:データベースゲートウェイ
- ユースケースインタラクターとデータベースの間にある
- appがDBに対して実行するCRUDのメソッドを含んだポリモーフィックインターフェイス
- appがある日付のログインユーザーの名前を知りたいと思えば、 UserGatewayインターフェイスに、
getNamesOfUsersWhoLoggedというメソッドを用意して、引数に Dateを受け取り、名前のリストを戻
す
- ユースケースのレイヤーで
SQLは使用しない
- その代わり、ゲートウェイにメソッドを用意して使う
- ゲートウェイはDBのレイヤーにあるクラスで実装する
- この実装もSQLを使うのでHumble Objectである
- インタラクターはビジネスルールをカプセル化しているので、テスト可能
第二章:データマッパー
- ORM(Object Relational Mapping)
- 書籍ではORMは存在しないと書かれている
- ORMはどのレイヤーかというと、
DBである
- このように、境界の近くには
Humble Objectパターンが存在する
第Ⅴ部:Part4 まとめ
- クリーンアーキテクチャ
- 今まで様々なアーキテクチャが存在した
- 依存性は、より上位レベルの方針にのみ向けよ (一方方向)
- 制御の流れと依存方向は分離し制御せよ
- プレゼンターとHumble Object
- Humble Objectとはデザインパターンの 1つである
- テストしにくい振る舞いと、テストしやすい振る舞いを分離する
- 境界の近くに存在する

More Related Content

PDF
第ⅴ部:clean architecture アーキテクチャ Part7
PDF
第ⅴ部:clean architecture アーキテクチャ Part8
PDF
第ⅴ部:clean architecture アーキテクチャ Part6
PDF
第ⅴ部:clean architecture アーキテクチャ Part3
PDF
第ⅴ部:clean architecture アーキテクチャ Part2
PDF
第ⅰ部:Clean Architecture イントロダクション
PDF
第ⅴ部:clean architecture アーキテクチャ Part1
PDF
大規模フロントエンドのクリーンアーキテクチャ化 ~ 年間売上1,000億円企業モノタロウの取組み ~
第ⅴ部:clean architecture アーキテクチャ Part7
第ⅴ部:clean architecture アーキテクチャ Part8
第ⅴ部:clean architecture アーキテクチャ Part6
第ⅴ部:clean architecture アーキテクチャ Part3
第ⅴ部:clean architecture アーキテクチャ Part2
第ⅰ部:Clean Architecture イントロダクション
第ⅴ部:clean architecture アーキテクチャ Part1
大規模フロントエンドのクリーンアーキテクチャ化 ~ 年間売上1,000億円企業モノタロウの取組み ~

Similar to 第ⅴ部:clean architecture アーキテクチャ Part4 (20)

PPTX
世界一わかりやすいClean Architecture release-preview
PPTX
世界一わかりやすいClean Architecture - DroidKaigiバージョン
PPTX
Clean architecture 紹介
PPTX
世界一わかりやすいClean Architecture
PDF
プレゼンテーション・サブシステム 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第38回】
PDF
第ⅱ部:Clean architecture 構成要素から始めよ
PDF
クリーンアーキテクチャを試してみた
PDF
クリーンアーキテクチャ学んでみた
PDF
アプリケーションアーキテクチャの現在、過去、未来
PDF
『アプリケーション アーキテクチャ ガイド2.0』のガイド
PDF
アプリケーション・サブシステム 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第37回】
PDF
ソフトウェア品質技術の歴史を振り返る - ソフトウェア品質測定を中心に -
PDF
ソフトウェアパターン概論およびパターンを活用したアーキテクチャ設計
PDF
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
PDF
jjug_night_20161121
PDF
Androidアプリ開発にクリーンアーキテクチャを取り入れよう
PDF
【18-C-3】システムアーキテクチャ構築の実践手法
PDF
Modeling in the Agile Age and casual astah models
PDF
設計モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第45回】
PPT
"The Coming-of-Age of Software Architecture Research" 紹介
世界一わかりやすいClean Architecture release-preview
世界一わかりやすいClean Architecture - DroidKaigiバージョン
Clean architecture 紹介
世界一わかりやすいClean Architecture
プレゼンテーション・サブシステム 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第38回】
第ⅱ部:Clean architecture 構成要素から始めよ
クリーンアーキテクチャを試してみた
クリーンアーキテクチャ学んでみた
アプリケーションアーキテクチャの現在、過去、未来
『アプリケーション アーキテクチャ ガイド2.0』のガイド
アプリケーション・サブシステム 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第37回】
ソフトウェア品質技術の歴史を振り返る - ソフトウェア品質測定を中心に -
ソフトウェアパターン概論およびパターンを活用したアーキテクチャ設計
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
jjug_night_20161121
Androidアプリ開発にクリーンアーキテクチャを取り入れよう
【18-C-3】システムアーキテクチャ構築の実践手法
Modeling in the Agile Age and casual astah models
設計モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第45回】
"The Coming-of-Age of Software Architecture Research" 紹介
Ad

More from tak (11)

PPTX
可読性について リーダブルコード Part5(優れたテストコード2)
PPTX
可読性について リーダブルコード Part4(優れたテストコード1)
PPTX
可読性について リーダブルコード Part3(コードの再構築)
PPTX
可読性について リーダブルコード Part2(ループとロジックの単純化)
PPTX
可読性について リーダブルコード part1(表面上の改善)
PPTX
DiI/DIコンテナを一から学んでみた
PPTX
TypeScriptのdecoratorについて
PPTX
Rust + web assemblyやってみた
PDF
第ⅴ部:clean architecture アーキテクチャ Part5
PDF
第ⅳ部:Clean architecture コンポーネントの原則
PDF
第ⅲ部:Clean architecture 設計の原則
可読性について リーダブルコード Part5(優れたテストコード2)
可読性について リーダブルコード Part4(優れたテストコード1)
可読性について リーダブルコード Part3(コードの再構築)
可読性について リーダブルコード Part2(ループとロジックの単純化)
可読性について リーダブルコード part1(表面上の改善)
DiI/DIコンテナを一から学んでみた
TypeScriptのdecoratorについて
Rust + web assemblyやってみた
第ⅴ部:clean architecture アーキテクチャ Part5
第ⅳ部:Clean architecture コンポーネントの原則
第ⅲ部:Clean architecture 設計の原則
Ad

第ⅴ部:clean architecture アーキテクチャ Part4