Пусть у меня есть класс DTO:Как создать неизменяемые 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 полей? Это приводит к распространению множества нечитаемых конструкторов и неподдерживаемого кода.
Существует решение этой проблемы, однако, модель Builder:
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 объектов ,
Есть ли какой-нибудь шаблон, который можно использовать здесь или не работает? Я думаю о шаблоне прокси, но я не уверен, что его можно применять так, чтобы он не выглядел как уродливый хак.
вы хотите DTO, который является «неизменным» и имеет государственные сеттер ... да? – jtahlborn
Создайте неизменяемую копию (или представление) изменчивого DTO после его инициализации устаревшим кодом? –
Он должен иметь метод, который устанавливает его в неизменное состояние. –