Clean Architecture - 読書メモ 1
設計とアーキテクチャ
ソフトウェアアーキテクチャ
- 目的
- 求められるシステムを構築・保守するために必要な人材を最小限に抑えること
崩壊したコードを書く方がクリーンなコードを書くより常に遅い
- TDDありとTDDなしで比較
- TDDを使ったほうが速い
速く進む唯一の方法はうまく進むこと
2つの価値のお話
ソフトウェアシステムの価値
- 振る舞い
- 構造 >> こちらの方が重要
- 簡単に変更できるようにする
- ソフトであるということ
- 「形状」ではなく「スコープ」に比例して難易度が変わるべき
- 簡単に変更できるようにする
アーキテクチャとは?
- 主な目的
- システムのライフサイクルをサポートすること
- 開発
- 開発しやすくなるようなシステムにする
- デプロイ
- 単一のアクションで簡単にデプロイ出来るようにする
- 速い檀家来からデプロイ戦略を考える
- 保守
- 保守派最もコストがかかる
- アーキテクチャを考え抜きコストを下げる
- 開発
- システムのライフサイクルをサポートすること
ソフトウェアの価値
独立性
優れたアーキテクチャがサポートすること
- システムのユースケース
- システムの運用
- システムの開発
- システムのデプロイ
レイヤーの切り離し
- UI・ビジネスルール・データベース等のレイヤーで切り離す
- 変更される理由をまとめる
ユースケースの切り離し
レイヤー・ユースケースを切り離すことで
- 「独立した開発」「独立デプロイ」を可能とする
切り離し方式
- ソースレベル
- モジュールを分離する
- モジュール間で影響しない
- デプロイレベル
- デプロイ可能な単位を分離する
- ソースコードの変更が他のモジュールに影響しない
- サービスレベル
- 実行単位を完全に分離する
- ソースやバイナリの変更が影響しない
バウンダリー:境界線を引く
ソフトウェアアーキテクチャとは、境界線を引く技芸である
方針とレベル
コンピュータプログラムは、入力を出力に変換する「方針」を記述したもの
- レベル
- 入力と出力からの距離
- 依存方向はレベルと結びつける
ビジネスルール
エンティティ
- ビジネスデータを操作するビジネスルールを含んだオブジェクト
- ビジネスルール
- システムが自動化されていなくても存在するルール
- ユースケースのことは知らない
- ビジネスルール
- 自動化されたシステムを使用する方法を記述したもの
- ユーザーインターフェイスについては記述しない
- エンティティのことを知っている
書籍
Clean Architecture 達人に学ぶソフトウェアの構造と設計
- 作者:Robert C.Martin
- 出版社/メーカー: KADOKAWA
- 発売日: 2018/07/27
- メディア: 単行本