我们将“bean”序列化为JSON,然后返回到我们的(基于vue.js的)UI层。到目前为止,我的豆子看起来像这样:
public class ExampleBean {
private final int id;
private final String name;
public ExampleBean(int id, String name) {
this.id = id; ...
}
// getter for all fields
}
它们由一些映射器实例化:
public ExampleBean map(SomeInternalThing foo) {
int id = getIdFromFoo(foo);
String name = doSomethingElse(foo.itsBar());
return new ExampleBean(id, name);
}
然后我进行了一些单元测试(对于映射器):
@Test
public void testGetId() {
... do some mocking setup so that the mapper can do its job
assertThat(mapperUnderTest.map(someFoo).getId(), is(5));
}
这种方法的主要优点是bean对象是不可变的(当我忘记初始化字段时编译器会告诉我。)
但是:该bean的字段数量不断增加。那个SomeInternalThing
上下文可能有30到50个“属性”,而bean中所需的字段数目......从现在的3到5到8。
真正“杀死”我的是映射代码为每个必需字段执行不同的操作。这需要我有越来越多的“常见”模拟规范来处理。
到现在为止,我想知道是否有更好的选择来实现这样的“仅数据对象”。
答案 0 :(得分:1)
在创建数据对象时,我个人更喜欢lombok(https://projectlombok.org/)。它摆脱了样板代码。您应该查看“@Builder”和“@Data”注释。
由于使用lombok始终是团队决策,因此您可以自己实施构建器模式(对于此类数据对象)。
这使您可以单独设置每个属性,并单独测试每个属性。
那个说你可能不应该对每个字段都使用构造函数。 (参见lombok中的@AllArgsConstructor) 正如你在这里看到的那样(https://en.wikipedia.org/wiki/JavaBeans)bean应该有一个公共默认构造函数