Builder
Step Builder: el compilador obliga a respetar el orden de construcción.
#Cuándo usarla
Cuando hay pasos obligatorios y orden que el cliente no puede romper.
public interface INeedHost { INeedPort WithHost(string host); }
public interface INeedPort { ICanBuild WithPort(int port); }
public interface ICanBuild { Connection Build(); }
public class ConnectionBuilder : INeedHost, INeedPort, ICanBuild
{
private string _host = ""; private int _port;
public static INeedHost Create() => new ConnectionBuilder();
public INeedPort WithHost(string host) { _host = host; return this; }
public ICanBuild WithPort(int port) { _port = port; return this; }
public Connection Build() => new(_host, _port);
}
// Uso obligado:
var c = ConnectionBuilder.Create().WithHost("db").WithPort(5432).Build();Tradeoffs
| Pro | Contra |
|---|---|
| Imposible construir mal el objeto | Muchas interfaces — más código |
#creational #fluent #type-safe