Если вы используете Java8, я предлагаю использовать DTO в области преобразовательной шаблона как предложено here
Ниже приведен пример реализации:
GenericConverter
public interface GenericConverter<I, O> extends Function<I, O> {
default O convert(final I input) {
O output = null;
if (input != null) {
output = this.apply(input);
}
return output;
}
default List<O> convert(final List<I> input) {
List<O> output = new ArrayList<O>();
if (input != null) {
output = input.stream().map(this::apply).collect(toList());
}
return output;
}
}
ConverterDTO
public class AccountCreateRequestConverter implements GenericConverter<AccountCreateRequest, AccountOutput> {
@Override
public AccountOutput apply(AccountCreateRequest input) {
AccountOutput output = new AccountOutput();
output.setEmail(input.getEmail());
output.setName(input.getName());
output.setLastName(input.getLastName());
output.setPassword(input.getPassword());
return output;
}
}
Потребитель
Потребительский класс:
class Consumer {
@Inject
AccountCreateRequestConverter accountCreateInputConverter;
void doSomething() {
service.registerAccount(accountCreateInputConverter.apply(input));
}
}
Сила этой модели исходят от легкости в использовании, так как вы могли бы пройти ни один или список лиц, в которых может быть другим вложенным DTO для преобразования с использованием их выделенных конвертеров внутри родительского класса преобразователя. Что-то вроде этого:
вложенной коллекции DTO конвертера примера
class ParentDTOConverter {
@Inject
ChildDTOConverter childDTOConverter;
void doSomething() {
@Override
public ParentDTOOutput apply(ParentDTOInput input) {
ParentDTOOutput output = new ParentDTOOutput();
output.setChildList(childDTOConverter.convert(input.getChildList()));
}
}
}
Шаблонов существуют для решения проблем. В чем проблема, которую вы хотите решить? –