Не обязательно. «Используйте только одну точку» - неточное изложение Закона Деметры.
Закон Деметры не рекомендует использовать несколько точек, когда каждая точка представляет результат другого объекта, например ::10000
- Первая точка - это метод, вызываемый из ObjectA, возвращающий объект типа ObjectB
- Следующая точка - метод, доступный только в ObjectB, возвращающий объект типа ObjectC
- Следующая точка - это свойство, доступное только в ObjectC
- до бесконечности
Однако, по крайней мере, на мой взгляд, закон Деметры не нарушается, если возвращаемый объект каждой точки все еще имеет тот же тип, что и исходный вызывающий объект:
var List<SomeObj> list = new List<SomeObj>();
//initialize data here
return list.FindAll( i => i == someValue ).Sort( i1, i2 => i2 > i1).ToArray();
В приведенном выше примере оба FindAll () и Sort () возвращают объект того же типа, что и исходный список. Закон Деметры не нарушается: в списке разговаривали только его ближайшие друзья.
При этом не все свободно взаимодействующие интерфейсы нарушают Закон Деметры, лишь бы они возвращали тот же тип, что и их вызывающая сторона.