『Clean Architecture 達人に学ぶソフトウェアの構造と設計』を読んだ

https://asciidwango.jp/post/176293765750/clean-architecture
asciidwango.jp

ソフトウェアの構造や設計についてどう考えるかを書いた本.「どのように実装するか」が気になってきた人向け.個人的にはかなり読みやすかった.

詳細の決定はあえて先延ばしにする

ソフトウェアの設計と聞くと,割と詳細まで決めてしまうというイメージがあったけど,この本では「詳細の決定を送らせろ」と述べている.初めから完璧なアーキテクチャはないため,具体的な実装部分はあえて決めないという手法を紹介している.

本書では,あるソフトウェアのデータアクセスの方法を例に先延ばしについて説明している.まずはスタブを作る.スタブでは開発が進まなくなった時,RAMにデータを保存するメソッドを実装する.そして,永続化を考えなければならなくなった時,単にファイルに書き出すメソッドを実装する.具体的な実装を簡単に切り替えるようにしておき,必要になるまで実装しないことで,後から柔軟に変更をすることができる.

データベースを先に決めてしまったため面倒なことになるという失敗はつい最近起こしたばかり.具体的な部分を決めるのが早すぎるというのは初学者あるあるかも知れない.

境界線を引く

詳細を先延ばしにするためには,機能がきちんと分けられていないといけない.依存関係をきちんと整理し,ビジネスルールと具体的な実装を分離する必要がある.具体的な実装が分離されているから,必要になった時に置き換えることができる.

やっぱりバランスが大事

同じ理由・同じタイミングで変更されるコンポーネントのまとまりと,再利用しやすいまとまりが一致するとは限らない.どんな理由でもコンポーネントをまとめることは,インタフェース分離の法則のように「必要な部分だけつまめるようにする」ことに相反する.コンポーネントをどのぐらい分離させて何をまとめるのかは,上手にバランスを取らなくてはならない.

境界線を引くと言っても,もしかしたら引かない方が良いこともある.変更される可能性が高い部分は分離させておき,変更が起きにくい部分はまとめてしまうなど,柔軟に対応する必要がある.