9.3 高品質なコードはカプセル化されている
内容
カプセル化とはインターフェース(やりたいこと)と実装(どうやるか)を切り離すこと。
開発者はアウトサイドインとインサイドアウトの方法でカプセル化をする。
これらの呼び名は著者がそう呼んでいるもので、
アウトサイドインプログラミング
ドメインを全体的に捉え、ユーザーのニーズとなる体験をベースに設計していく方法。
インサイドアウトプログラミング
問題を小さく分解し、それらを組み合わせて1つのソリューションを作る方法。
開発者はこの両方の観点を持って開発に臨むべきだが、先に必要なのはアウトサイドインの方。
インサイドアウトから始めると、全体を俯瞰せずに実装を進めることができるため、ドメインを全体視した場合の持つべきふるまいや役割と乖離する可能性があり、そういったモジュールは結果的に壊れやすいため。
だからユーザーの体験に基づいて設計し、その実現方法はインサイドアウトの観点で進めるとよい。
基本的に、モジュールを使う側の視点で設計されたインターフェースはpublicで、それ以外はprivate、必要に応じて protected 、package というようなアクセスレベルで調整すると良い。
学び
- カプセル化の仕方はいろいろあるが、まずユーザーに届ける体験をベースに考えて、ユーザーが何をしたいのか、何を得たいのかをインターフェースにすし、具体的な実装は別で隠すという方法を基本的な考えに持つと良い。
学びを活かすアイディア・行動
- 今の所特になし