假设我有一个 DTO 类:
public class SomeImmutableDto {
private final String someField;
private final String someOtherField;
public SomeImmutableDto(String someField, String someOtherField) {
// field setting here
}
// getters here
}
这是一个不错的不可变 DTO。但是如果我有 20 个字段呢?它导致大量不可读的构造函数和不可维护的代码激增。
然而,这个问题有一个解决方案,建造者模式:
public class SomeImmutableDto {
private final String someField;
private final String someOtherField;
private SomeImmutableDto(Builder builder) {
// field setting here
}
public static class Builder {
private String someField;
private String someOtherField;
// setters here
public SomeImmutableDto build() {
// building code here
}
}
// getters here
}
现在我可以做这样的事情:
SomeImmutableDto dto = new SomeImmutableDto.Builder()
.setSomeField(/* ... */)
*setSomeOtherField(/* ... */)
.build();
现在我有一个不可变的 dto,它没有大量丑陋的构造函数。
我的问题是我需要一个具有公共设置器且不可变的 dto,因为项目中有一些遗留代码目前无法重构,并且它需要公共设置器的存在才能初始化 dto 对象。
是否有一些在这里可用的模式或者这不起作用?我正在考虑代理模式,但我不确定它是否可以以一种看起来不像丑陋的黑客的方式应用。