2013-07-01 46 views
2

我有许多DTO对象。每个DTO类有方法通用DTO转换器模式

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

我想用德兴模式为我DTO对象转换。我可以使用哪种设计模式?

推土机架构不错。但我想写一个通用模式。

+5

模式的存在是解决问题。你想解决什么问题? –

回答

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())); 
     } 

    } 

}