インタフェース

一昨日あたりから設計について勉強してるんだけど、結局のところSOLID原則が指してるのが可換(低結合)と隠蔽(高凝集)だって記事を読んでなるほどなってなった。

そう考えると、BootstrapやMaterial UIの意義もやっぱインタフェースにあって、HTML側とCSS側をそれぞれ隠蔽して、可換にしてるんじゃないか。BootstrapはCSS側だけど、それをHTML側からやってるのがMarkdownで、もちろんすべてのHTMLを吐き出すわけじゃないけど、どういう要素に対してどういうタグが付けられるのか、ってざっとインタフェースで決まってるからCSSはそのとおりに作ればいいし、Bootstrapだったら先にCSSのインタフェースが決まってるからHTMLはそのとおりに作ればいい、ってまさに可換なんだ。おそらくHTMLとCSSを作った人が目指していたような責任の分界ができてる。インタフェースをチーム内だけじゃなくOSSで公開したところに意義がある。

で、SOLID原則はオブジェクト指向というよりもむしろモジュール化全般に通じてて、機能を集約して機能を作る、機能は機能の集まりで機能から機能ができてる、という状態。それが結局はプログラミングでもなんでも、問題解決のための資源を作るためのやりかたなんじゃないか。プログラミングは問題に対する機能を詳細まで詰めて、詳細を元の機能のレベルまで抽象化しなおすのが設計の役割だ。そうしないと理解するのが難しいし、使いにくいから。そうなると継承はモジュール化よりもむしろ詳細を作りこむ、実装の方に近い。だから汎用性の低い継承よりもモジュール化向きの委譲使っていこ、って感じでGoとかも作られてるっぽい。

このあたり、設計はむしろプログラムというより人間の認知のためだと考えたら、ドメイン駆動設計で問題領域そのものを抽象化して理解しやすくすることには一定に価値があると思う。ユビキタス言語はチーム内で共通の名前をつけて、それを人と人との間のインタフェースにしてるんだし。とにかくインタフェースだ。ルール。