Skip to main content

· One min read
Alvaro Jose

I have not experiment to much with fluent interfaces. But is something cool especially to make code that is expressive.

public struct Coordenates
{
public double X { get; set; }
public double Y { get; set; }
public double Z { get; set; }
}

public static class CoordenatesExtensions
{

public static Coordenates X(this Coordenates coordenates, double value)
{
coordenates.X = value;
return coordenates;
}

public static Coordenates Y(this Coordenates coordenates, double value)
{
coordenates.Y = value;
return coordenates;
}
public static Coordenates Z(this Coordenates coordenates, double value)
{
coordenates.Z = value;
return coordenates;
}
}

public class Points
{
private Coordenates point;
public Points()
{
point = new Coordenates().X(2.1).Y(2.4).Z(3.2);
}
}

also can be used with some language properties to make it more expressive

public static class GeneralExtensions
{
public static T As<T>(this object o) where T : class
{
return o as T;
}

public static T Cast<T>(this object o)
{
return (T)o;
}

public static bool Is<T>(this object o)
{
return o is T;
}
}

· One min read
Alvaro Jose

When doing complex objects using an object to help the building is welcome.

public class Complex
{
double x;
double y;
double z;

float height;
float width;

string foreground;
string background;

public Complex()
{
x = 1.456;
y = 1.234;
z = 1.789;

height = 10.12;
width = 10.14;

foreground = "#FFF";
background = "#FA1";
}

}

In this way you remove some complexity of just adding steps in your constructor to something more abstract and can contain the logic.

public class Complex
{
public double X { get; set; }
public double Y { get; set; }
public double Z { get; set; }

public double Height { get; set; }
public double Width { get; set; }

public string Foreground { get; set; }
public string Background { get; set; }

public Complex(ComplexBuildHelper buildHelper)
{
buildHelper.Construct(this);
}

}

public class ComplexBuildHelper
{
public void Construct(Complex reference)
{
BuildPosition(reference);
BuildDimension(reference);
BuildCharacteristics(reference);
}

private void BuildPosition(Complex reference)
{
reference.X = 1.456;
reference.Y = 1.234;
reference.Z = 1.789;
}

private void BuildDimension(Complex reference)
{
reference.Height = 10.12;
reference.Width = 10.14;
}

private void BuildCharacteristics(Complex reference)
{
reference.Foreground = "#FFF";
reference.Background = "#FA1";
}
}