如何实现“bean”和“bean映射”代码?

时间:2017-08-01 09:21:32

标签: java data-structures javabeans

我们将“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。

真正“杀死”我的是映射代码为每个必需字段执行不同的操作。这需要我有越来越多的“常见”模拟规范来处理。

到现在为止,我想知道是否有更好的选择来实现这样的“仅数据对象”。

1 个答案:

答案 0 :(得分:1)

在创建数据对象时,我个人更喜欢lombok(https://projectlombok.org/)。它摆脱了样板代码。您应该查看“@Builder”和“@Data”注释。

由于使用lombok始终是团队决策,因此您可以自己实施构建器模式(对于此类数据对象)。

这使您可以单独设置每个属性,并单独测试每个属性。

那个说你可能不应该对每个字段都使用构造函数。 (参见lombok中的@AllArgsConstructor) 正如你在这里看到的那样(https://en.wikipedia.org/wiki/JavaBeans)bean应该有一个公共默认构造函数