抽象化
考えられる最もシンプルな状態にしておく
これが
YAGNIでもない、最適な「変更にopenな状態」なのかも
最小化
minimalism
インターフェースを通して公開するものを最小化する
詳細を公開しすぎると、クライアントに統合されてしまう
拡張性
extensibility
抽象自体が拡張に開いているように設計する
合成可能性
composability
モジュールとして抽象を設計すると、抽象どうして組み合わせることができる
副作用を持たないように気にかけるなど
関連
コードの重複を見つけたとき、
そのコードの重複が、「
偶然の重複」なのか「本物の重複」なのかを見抜く必要がある
偶然の重複なのであれば、重複すべできではない
ref

p.163
という考え方は、圏論の本質が自然返還であることと関連がありそう

関連
UpdaterとSelctorの2つに抽象化する
reducerや、FCもこの2つで表現できる
参考