No necesariamente. "Utilizar solo un punto" es un resumen inexacto de la Ley de Demeter.
La Ley de Demeter desalienta el uso de múltiples puntos cuando cada punto representa el resultado de un objeto diferente, por ejemplo:
- primer punto es un método llamado de Objecta, devolver un objeto de tipo ObjectB
- siguiente punto es un método sólo está disponible en ObjectB, devolver un objeto de tipo ObjectC
- siguiente punto es una propiedad disponible sólo en ObjectC
- ad infinitum
Sin embargo, al menos en mi opinión, la Ley de Demeter ¿no infringe si el objeto de retorno de cada punto sigue siendo el mismo tipo que la llamada original:
var List<SomeObj> list = new List<SomeObj>();
//initialize data here
return list.FindAll(i => i == someValue).Sort(i1, i2 => i2 > i1).ToArray();
En el ejemplo anterior, tanto FindAll () y Sort() devuelven el mismo tipo de objeto que la lista original. La Ley de Demeter no se viola: la lista solo hablaba con sus amigos inmediatos.
Dicho no todas las interfaces con fluidez violan la Ley de Demeter, siempre y cuando devuelvan el mismo tipo que la persona que llama.
Se podría argumentar que una interfaz fluida no viola la Ley de Demeter porque solo está accediendo al mismo objeto en una cadena de puntos. – MSN
Una segunda forma de ver esto es que una interfaz fluida es simplemente una forma alternativa y compacta de realizar operaciones secuenciadas de tal manera que la mutación de estado se abstraiga, ya que los resultados de cada paso intermedio están implícitos. –