d的构造器库

原文
库地址

A a = new A();
a.setName("Bob");
a.setAge(20);
a.isProbation(false);
a.isActive(true);
...

这样构造太冗余.

A a = new A("Bob", 20, false, true);

而如上多参构造无标记,易搞混顺序,或含义不清楚
本库,允许这样:

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();

此工具允许单式构造,及清楚标记参数,还可完全不必写构造器.

如何扩展builder方法呢?
自动生成构建器方法的,并在类中沿继承链上移,来取所有字段(假定你说的"扩展"指的是继承?)
下面是其中一个单元测试:

class A2 {
  int a;
  string b;
}

class B2 : A2 {
  int c;

  mixin AddBuilder!(typeof(this));
}

//应该可从`生成器`取得,所有继承`字段`
unittest {
  B2 b2 = B2.builder()
      .a(3)
      .b("ham")
      .c(4)
      .build();

  assert(b2.a == 3);
  assert(b2.b == "ham");
  assert(b2.c == 4);
}
posted @ 2023-01-06 18:48  zjh6  阅读(16)  评论(0)    收藏  举报  来源