1

デメテルの法則に関する記事を読んだのですが、混乱してしまいました。

それは次のようなことを述べています:

var width = mapControl.get_mapState().getMapRange().getSize().get_width();

これに置き換える必要があります:

var mapState = mapControl.get_mapState();
var mapRange = mapState.get_mapRange();
var width = mapRange.get_width()

後者は最初のものとまったく同じですが、書き方が異なるため、ここで少し混乱しています。どちらの場合も、現在のクラスの直接の友人ではない「幅」に最終的にアクセスしています。

では、なぜ 2 番目の方法が本当に優れているのでしょうか。

4

1 に答える 1

1

後者は最初のものとまったく同じですが、異なる方法で記述されているため、ここで少し混乱しています。どちらの場合も、現在のクラスの直接の友人ではない「幅」に最終的にアクセスしています。

では、なぜ 2 番目の方法が本当に優れているのでしょうか。

それは本当に良いことではありません。デメテルの法則のアプローチは、コードをリファクタリングすることであり、クライアント コードは次のようになります。

var width = mapControl.get_width();

この場合、クライアント コードは、mapControl に「状態」があり、「範囲」があり、「幅」があることを知る必要はありません。「幅」を公開していることを知る必要があるだけです。

于 2015-08-31T15:07:20.230 に答える