https://code.dlang.org/packages/builder
Interacting with many projects that are related to Java, I could not help notice that a common "Builder API" is not easily available in D.
What is the problem? When constructing classes, especially those with lots of data, there are two broad ways of building the object.
- Initializing each field in a different statement.
A a = new A();
a.setName("Bob");
a.setAge(20);
a.isProbation(false);
a.isActive(true);
...
This approach involves writing a lot of boiler plate, and it doesn't work well for quickly creating objects inline, such as during a function call.
- Using a constructor with many arguments.
A a = new A("Bob", 20, false, true);
This approach can construct arguments inline, such as during a function call, however, the arguments are not labeled, making it easy to get the order wrong or for the meaning to be unclear.
This library allows one to get the best of both worlds. Construction within a single statement, but also without losing meaning of the parameters, e.g.
class A {
string name;
int age;
bool isProbation;
bool isActive;
mixin AddBuilder!(typeof(this));
}
A a = A.builder()
.name("Bob")
.age(20)
.isProbation(false)
.isActive(true)
.build();