2013-07-01 4 views
2

У меня есть много объектов DTO. Каждый класс DTO имеют методыОбщий конвертер DTO Образец

  • convertDTO(Entity entity)
  • convertDTOList(List<Entity> entity)

Я хочу использовать шаблон Desing для моего DTO объекта преобразователя. Какую модель дизайна я могу использовать и как?

Основание бульдозера хорошее. Но я хочу написать общий шаблон.

+5

Шаблонов существуют для решения проблем. В чем проблема, которую вы хотите решить? –

ответ

1

Существует множество различных решений. Вы можете найти обсуждение об этом здесь Object Conversion Pattern

0

Я не совсем уверен, что вы пытаетесь сделать здесь, но основываясь исключительно на том, что вы написали, я бы сказал, создав интерфейс, который реализуется всеми вашими DTO, возможно с общими параметрами.

1

Если вы используете 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())); 
     } 

    } 

} 
Смежные вопросы