デメテルの法則

Overview

「親しい人だけと会話しよう」

ちょいと複雑そうなのですが、簡単にいうとこういうことみたい。

Motivation/Context

いくつものオブジェクトにわたって構造的に依存すると良いことないよねっていうこと。
例えばこういうやつだね。

user.profile.address.country;
  // = "Japan"

こうなると、userから見てaddressとかcountryって未知のオブジェクトだし、addressが変更された時って結構大変。
オブジェクト同士が密結合すぎてコードを読むのも大変だね。
影響調査とか考えたら修正するより追加のメソッドを作りたいくらい。

Get Started!!

じゃあどうするのかっていうと、こういうこと。

user.profile.getAddressCountry()

userからすると親しい人(profile)にアクセスしてメソッドを呼び出してるだけ。
これにより一人との会話に集中できるよね!っていうことみたい。

結局addressオブジェクトの修正が入るとprofileも修正することになるけど、userまで修正する必要はなくなるよね。

みたいな?

要するに、メソッドチェーンは1回までっていう感じかな。

References

https://qiita.com/hirokidaichi/items/d6c473d8011bd9330e63

https://zenn.dev/miya_tech/articles/b59916140347e2