必ずしも。「1つのドットのみを使用する」は、デメテルの法則の不正確な要約です。
デメテルの法則は、各ドットが異なるオブジェクトの結果を表す場合、複数のドットの使用を推奨していません。例:
- 最初のドットはObjectAから呼び出されるメソッドで、ObjectB型のオブジェクトを返します。
- 次のドットは、ObjectBでのみ使用可能なメソッドであり、ObjectC型のオブジェクトを返します。
- 次のドットは、ObjectCでのみ使用可能なプロパティです
- ad infinitum
ただし、少なくとも私の意見では、各ドットの戻りオブジェクトが元の呼び出し元と同じタイプである場合、デメテルの法則に違反することはありません。
var List<SomeObj> list = new List<SomeObj>();
//initialize data here
return list.FindAll( i => i == someValue ).Sort( i1, i2 => i2 > i1).ToArray();
上記の例では、FindAll()とSort()の両方が、元のリストと同じタイプのオブジェクトを返します。デメテルの法則に違反することはありません。リストはその直接の友人とだけ話しました。
とはいえ、発信者と同じタイプを返す限り、すべての流暢なインターフェイスがデメテルの法則に違反しているわけではありません。