domingo, 11 de noviembre de 2012

Código fuente más legible con Interfaces Fluent

Cuando hablamos de interfaces fluent (nombre acuñado por el propio Eric Evans y Martin Fowler), es hablar de un tipo de implementación de la programación orientada a objetos que nos ayuda a crear código fuente más legible. Se basa en crear métodos dentro de objetos que nos devuelven al propio objeto que las usa. De esta forma podemos encadenar varias llamadas encadenadas por puntos. Pero mejor vamos a ver un ejemplo en C# :

public class FluentClass
{
    private int value;
 
    public FluentClass WithValue(int value) { this.value = value; return this; }
 
    public FluentClass AddOne() { this.value += 1; return this; }
 
    public FluentClass SubstractTwo() { this.value -= 2; return this; }
 
    public FluentClass MultiplyThree() { this.value *= 3; return this; }
 
    public FluentClass DrawValue() { Console.WriteLine(this.value); return this; }
}
 
static void Main(string[] args)
{
    var fluent = new FluentClass()
                        .WithValue(9)
                        .DrawValue()
                        .AddOne()
                        .DrawValue()
                        .SubstractTwo()
                        .DrawValue()
                        .MultiplyThree()
                        .DrawValue();
 
    Console.ReadLine();
}

En la wikipedia existen ejemplos en Ruby, java, scala y c++.

Dejo link:
http://en.wikipedia.org/wiki/Fluent_interface