# Clean Architecture 達人に学ぶソフトウェアの構造と設計 ## Metadata * Author: [Robert C.Martin、角 征典、高木 正弘](https://www.amazon.comundefined) * ASIN: B07FSBHS2V * Reference: https://www.amazon.com/dp/B07FSBHS2V * [Kindle link](kindle://book?action=open&asin=B07FSBHS2V) ## Highlights ソフトウェアアーキテクチャと真剣に向き合うには、優れたソフトウェアアーキテクチャとは何かを知る必要がある。 — location: [480](kindle://book?action=open&asin=B07FSBHS2V&location=480) ^ref-53893 --- ソフトウェアの1つ目の価値( 振る舞い)は緊急だが、常に重要とは限らない。  ソフトウェアの2つ目の価値( アーキテクチャ)は重要だが、常に緊急とは限らない。 — location: [540](kindle://book?action=open&asin=B07FSBHS2V&location=540) ^ref-59120 --- ソフトウェア開発者のジレンマは、ビジネスマネージャーがアーキテクチャの重要性を評価できないことである。 そのためにソフトウェア開発者が雇われている。 したがって、ソフトウェア開発チームには、機能の緊急性よりもアーキテクチャの — location: [549](kindle://book?action=open&asin=B07FSBHS2V&location=549) ^ref-16336 --- 重要性を強く主張する責任が求められる。 — location: [551](kindle://book?action=open&asin=B07FSBHS2V&location=551) ^ref-36703 --- 3つのプログラミングパラダイムを紹介する際に、私が意図的に設定したパターンに注目してほしい。これらのパラダイムは、プログラマから能力を 削除 しているのである。新しい能力を提供しているものはない。それぞれが ネガティブ な意図を持ち、何らかの規律を課しているのである。これらのパラダイムは、 何をすべきかを伝えるというよりも、 何をすべきでないかを伝えているのである。 — location: [615](kindle://book?action=open&asin=B07FSBHS2V&location=615) ^ref-5288 --- アーキテクトは、いつどのような理由でどのように変更するかを考えて機能を分割する。そして、分割した機能をコンポーネントの階層構造にまとめる。 — location: [1311](kindle://book?action=open&asin=B07FSBHS2V&location=1311) ^ref-5396 --- 安定したソフトウェアアーキテクチャは、変化しやすい具象への依存を避け、安定した抽象インターフェイスに依存すべきである。 — location: [1491](kindle://book?action=open&asin=B07FSBHS2V&location=1491) ^ref-28517 --- 凝集性に関するこれらの原則には相反するところがある。再利用・リリース等価の原則(REP)と閉鎖性共通の原則(CCP)は、 包含関係 にある。どちらも、ひとつのコンポーネントを大きくする方向に働くものだ。一方の全再利用の原則(CRP)は、これらとは 相反する 原則で、ひとつのコンポーネントを小さくする方向に働くものだ。これら3つの原則のバランスをうまくとるのが、アーキテクトの腕の見せどころだ。 — location: [1763](kindle://book?action=open&asin=B07FSBHS2V&location=1763) ^ref-1545 --- これまでに述べたように、優れたアーキテクチャは以下のことをサポートしなければいけない。 ●システムのユースケース ●システムの運用 ●システムの開発 ●システムのデプロイ — location: [2392](kindle://book?action=open&asin=B07FSBHS2V&location=2392) ^ref-59723 --- ビジネスルール自体は、アプリケーションに密接に結び付いているものもあれば、一般的なものもある。たとえば、入力フィールドの検証は、アプリケーションと密接に結び付いている。一方、口座の利率計算や在庫の計算といったビジネスルールは、そのドメインに密接に結び付いている。この2種類のルールは異なる頻度や理由で変更されるため、独立して変更できるように分離すべきである。 — location: [2458](kindle://book?action=open&asin=B07FSBHS2V&location=2458) ^ref-47680 ---