Preciso de uma interface que me garanta a disponibilidade de um determinado método, incluindo assinatura específica. Até agora, é o que tenho:
public interface Mappable<M> {
M mapTo(M mappableEntity);
}
O problema surge quando uma classe deve ser mapeada para várias outras entidades. O caso ideal seria este (não java):
public class Something implements Mappable<A>, Mappable<B> {
public A mapTo(A someObject) {...}
public B mapTo(B someOtherObject) {...}
}
Qual seria a melhor maneira de conseguir esse remanescente o mais "genérico" possível?
C
e desejaSomething
ser mapeável a ela, precisará modificarSomething
, o que é muito acoplador. Apenas adicionar um novoSoemthingToCMapper
é menos invasivo.Dado que não é permitido implementar múltiplas interfaces, você pode considerar o uso de encapsulamento. (exemplo usando java8 +)
Por favor, verifique aqui para mais informações e mais exemplos: Como criar uma classe Java que implemente uma interface com dois tipos genéricos? .
fonte
Se você deseja mapear User para UserDTO e mapear User para UserViewModel, precisará de duas implementações separadas. Não acumule toda essa lógica em uma única classe - não faz sentido fazer isso.
Atualize para manter Joachim feliz
Mas agora estamos no domínio Automapper ( http://automapper.codeplex.com/wikipage?title=Custom%20Type%20Converters )
fonte
IMappable
seja um bom nome para algo que mapeia outras coisas.Mapper
(ouIMapper
, se você precisar ;-)) provavelmente está mais correto. (A propósito: não, esse não foi o meu voto negativo).