「CSS設計における、すべてがコンポーネントであるという誤謬」がオブジェクト指向設計に読み替えてもわかりみしかない


コンポーネント・ファーストとオブジェクト指向

元ネタはこちらのブログ

コンポーネント・ファーストのCSS設計には痛みが伴う というもの。

yuheiy.com

「デザイン」を「業務」、「コンポーネント」を「オブジェクト」に置き換えると、そのままオブジェクト指向設計の痛みとして読むことができる。

特に以下の内容は、その痛みをよく表している。

たまたま近くにあっただけのものをひとつのコンポーネントとしてまとめたり、偶然そうなっているだけのものに意図を見い出して抽象化したりして、変更が発生してから、間違った構造化がなされていたことに気づく。あるいは、もっと細かなルールが見落とされてしまう。こうした取り違えが、コンポーネントありきの発想によって誘発される。コンポーネント化するということは、解釈を加えることだ。だから、変更に対応するたびに、間違った解釈を修正するという不必要な痛みが伴う。


ユーティリティ・ファーストと関数型プログラミング

前述のブログでは「コンポーネント・ファースト」に相対するものとして「ユーティリティ・ファースト」を上げている。

これは「オブジェクト指向プログラミング」と「関数型プログラミング」の対比として見ることができる。

「コンポーネント・ファースト」と「ユーティリティ・ファースト」のどちらが優れているか?という点も、「オブジェクト指向」と「関数型」のどちらが優れているかという議論と同じであろう。


これは結局のところ、「概念の安定性」という点に帰結すると考えられる(ここでの安定性とは、問題領域の中で広く一般化され、容易に変更されることが無い、ということを指す)。

安定した概念のもとでは、コンポーネントあるいはオブジェクトとして正しい解釈を行うことで、優れた抽象化が提供されることとなる。

一方、安定しない概念のもとでは、「変更に対応するたびに、間違った解釈を修正するという不必要な痛みが伴う」ことになる。 オブジェクト指向設計では、問題領域の理解が進む早い段階からモデル(コンポーネント)化が促されるため、間違った抽象化や構造化が発生しやすい。


いずれにせよ、どちらかが完全に正しいというものではなく、現実的に適材適所で使い分けていけば良いのだと思う 入梅の候でした。