Necesito una interfaz que me asegure que un cierto método, incluida la firma específica, esté disponible. Hasta ahora lo suyo es lo que tengo:
public interface Mappable<M> {
M mapTo(M mappableEntity);
}
El problema surge cuando una clase debe ser mapeable a varias otras entidades. El caso ideal sería este (no java):
public class Something implements Mappable<A>, Mappable<B> {
public A mapTo(A someObject) {...}
public B mapTo(B someOtherObject) {...}
}
¿Cuál sería la mejor manera de lograr que esto permanezca lo más "genérico" posible?
C
y deseaSomething
ser mapeable a esa, entonces necesitaría modificarSomething
, lo que es demasiado acoplamiento. Solo agregar una nuevaSoemthingToCMapper
es menos intrusivo.Dado que no está permitido implementar múltiples interfaces, puede considerar el uso de encapsulación. (ejemplo usando java8 +)
Consulte aquí para obtener más información y más ejemplos: ¿Cómo hacer una clase Java que implemente una interfaz con dos tipos genéricos? .
fuente
Si desea asignar Usuario a UserDTO y asignar Usuario a UserViewModel, necesitará dos implementaciones separadas. No acumule toda esta lógica en una sola clase, no tiene sentido hacerlo.
Actualización para mantener a Joachim feliz
Pero ahora estamos en el ámbito de Automapper ( http://automapper.codeplex.com/wikipage?title=Custom%20Type%20Converters )
fuente
IMappable
sea un buen nombre para algo que mapee otras cosas.Mapper
(oIMapper
, si es necesario ;-)) es probablemente más correcto. (Por cierto: no, ese no fue mi voto negativo).