初始化 DTO 中的字段

Initialize fileds in DTO

我的一个朋友建议我初始化类型为 (ArrayList) 的 DTO 字段 并且在这样的 DTO 中只有 ArrayList 类型以避免 NullPointerException

public class fooDto {
    private SomeClasse someClasse = new SomeClasse();
    private ArrayList<Bar> bars = new ArrayList();
}

我们应该做他的吗?这是一个好习惯吗

换句话说,我们是否应该使用“= new SomeClasse()”?

使用 List,绝对是(不幸的是,尝试将项目放入空列表是很常见的)。但是关于 someClasse,这取决于。如果您想不惜一切代价避免烦人的空检查,那也许还可以。但是,如果 someClasse 是一个可选字段,那么为什么要初始化它呢?另一方面,如果它不应该为 null,则最好抛出此异常。毕竟很容易找到它的原因,否则你会分析它实际上是由什么东西设置为空值还是因为某些错误而为空?

总而言之,我认为不初始化它可以获得更多。您总是可以使用一些 preconditions 来轻松检查空值并抛出更文明的异常。

取决于您如何使用这些 DTO。

当您必须手动将数据从域对象复制到 DTO 时,这样做很有意义。

否则,如果您为此使用库,例如​​ ModelMapperbeanutils 或类似的东西,对我来说它看起来有点多余,因为此类工具可以处理空值和所有此类的东西。

我认为 Collection 初始化它是有意义的。当涉及其他属性时,例如您的 SomeClass 示例,这可能因情况而异。

可以使用空对象设计模式,该模式应该避免意外地拥有真实的null值。