yotiky Tech Blog

とあるエンジニアの備忘録

Clean Architecture 達人に学ぶソフトウェアの構造と設計 第I部 第II部

Clean Architecture 達人に学ぶソフトウェアの構造と設計」を読んだのでそのまとめです。

www.amazon.co.jp

第I部 イントロダクション

第1章 設計とアーキテクチャ

本書の目的は設計とアーキテクチャについて最終的な定義をすること、両者に違いはない

本書で優れたクリーンなアーキテクチャと設計を説明する

第2章 2つの価値のお話

ソフトウェアシステムは2つの価値を提供する

マシンに「振る舞い」を与える

ハードウェアから切り離し、振る舞いの変更に柔軟性を持たせる、つまり「ソフト」であること

アーキテクトは構造にフォーカスしてこれ(ソフト)を達成するアーキテクチャを構築する

第II部 構成要素から始めよ:プログラミングパラダイム

ソフトウェアアーキテクチャは、構成要素で最も詳細な「コード」から始まる

第3章 パラダイムの概要

パラダイムは何をすべきでないかを伝えている

パラダイムアーキテクチャの3つの大きな関心事にそれぞれ対応している

構造化プログラミングは「機能」に、 ポリモーフィズムは「コンポーネントの分離」に、関数型プログラミングは「データ管理」に

第4章 構造化プログラミング

構造化プログラミングは、機能分割を可能にする

アーキテクチャレベルにおいても、上位レベルから下位レベルまで無限に機能を分割していくことができる

第5章 オブジェクト指向プログラミング

アーキテクトにとって、OOとは「ポリモーフィズムを使用することで、システムにあるすべてのソースコードの依存関係を絶対的に制御する能力」

これでアーキテクトは、上位レベルの方針を含んだモジュールを下位レベルの詳細を含むモジュールから独立させる「プラグインアーキテクチャ」を作成できる

第6章 関数型プログラミング

関数型プログラミングに学べることは、変数が変化しなければいくつかの大きな問題が発生しないこと

不変性に関する妥協となるのは、変数を変更しないコンポーネントと変更するコンポーネントに分離することである

不変コンポーネントにできるだけ多く処理を押し込み、可変コンポーネントからできるだけコードを追い払うべきである

過去半世紀でツールやハードウェアは変わったが、ソフトウェアの本質は変わっていない

いずれも新たな能力を与えてくれたのではなく、何をすべきではないかを教えてくれた