J'ai besoin d'une interface qui m'assure qu'une certaine méthode, y compris une signature spécifique, est disponible. Jusqu'à présent, c'est ce que j'ai:
public interface Mappable<M> {
M mapTo(M mappableEntity);
}
Le problème se pose lorsqu'une classe doit être mappable à plusieurs autres entités. Le cas idéal serait celui-ci (pas java):
public class Something implements Mappable<A>, Mappable<B> {
public A mapTo(A someObject) {...}
public B mapTo(B someOtherObject) {...}
}
Quelle serait la meilleure façon de parvenir à ce que cela reste aussi «générique» que possible?
C
et que vous voulezSomething
y être mappable, vous devez alors modifierSomething
, ce qui est trop de couplage. L'ajout d'un nouveauSoemthingToCMapper
est moins intrusif.Étant donné que cela n'est pas autorisé à implémenter plusieurs interfaces, vous pouvez envisager l'utilisation de l'encapsulation. (exemple utilisant java8 +)
Veuillez vérifier ici pour plus d'informations et d'autres exemples: Comment créer une classe Java qui implémente une interface avec deux types génériques? .
la source
Si vous souhaitez mapper User à UserDTO et mapper User à UserViewModel, vous aurez besoin de deux implémentations distinctes. N'empilez pas toute cette logique dans une seule classe - cela n'a pas de sens de le faire.
Mise à jour pour garder Joachim heureux
Mais maintenant, nous sommes dans le domaine Automapper ( http://automapper.codeplex.com/wikipage?title=Custom%20Type%20Converters )
la source
IMappable
soit un bon nom pour quelque chose qui mappe d'autres choses.Mapper
(ouIMapper
, si vous devez ;-)) est probablement plus correct. (Au fait: non, ce n'était pas mon downvote).