デメテルの法則とは、知っている範囲を少なく、特化させるという話です。
簡潔に言うと「直接の友達とだけ話すこと」と要約できる。基本的な考え方は、任意のオブジェクトが自分以外(サブコンポーネント含む)の構造やプロパティに対して持っている仮定を最小限にすべきであるという点にある。
https://ja.wikipedia.org/wiki/デメテルの法則
少し見ていきましょう。
目次
知っている範囲が広いと問題?
様々なことを知っているというのは何でもできるスーパーマンですね。とても素晴らしいと思います。
ただ、その人がいない場合に周りがとても困ったことになってしまいます。あの人がいないと、何も進まないという状況になってしまうんですね。
それがプログラミングでも起こりえます。
例えば、あるモジュールを試験するためには、そのスーパーマンが必要になり、あるモジュールに簡単な機能を追加する場合にもスーパーマンが必要になり、と色々な場所で活用されることになります。
ただ、そのようになると、スーパーマン側に修正が入った場合はどうなるでしょう?
全てのモジュールがスーパーマンを必要としているため、全てのモジュールで確認が必要で、もしかしたら修正も必要かもしれません。
そんな事態を避けるために、何でも知っている人を作らず、隣の人の知識だけを持っている状態にしておいたほうが良いというのがデメテルの法則です。
スーパーマンを生み出さないためには
便利にしすぎないことですね。 スーパーマン的なオブジェクトはとても便利です。何をするにしてもそれだけを呼べば完了しますし、全てをやってくれます。
ただ、それはその後の厳しさにつながってしまいます。時間を割いてでも、スーパーマンを一人ではなく、便利ではない、その小さい分野しか知らない人を作った方が、いずれ良かったと思うときが来るでしょう。
まとめ
知っている範囲が広く頼れる人は、長期運用を考えた場合、ちょっと合わないということですね。
小さい範囲を知っているそれ専門の人を複数作った方が一時は悪くなるかもしれませんが、長期的に見ればよくなるでしょう。
ぜひ、スーパーマンではなく、専門家を頼るようにしてみてください。