Potrzebuję interfejsu, który zapewnia, że pewna metoda, w tym konkretny podpis, jest dostępna. Do tej pory mam to:
public interface Mappable<M> {
M mapTo(M mappableEntity);
}
Problem powstaje, gdy klasa powinna być odwzorowana na wiele innych encji. Idealnym przypadkiem byłoby to (nie java):
public class Something implements Mappable<A>, Mappable<B> {
public A mapTo(A someObject) {...}
public B mapTo(B someOtherObject) {...}
}
Jaki byłby najlepszy sposób, aby osiągnąć to jak najbardziej „ogólne”?
C
i chceszSomething
być do niej mapowalny, musisz zmodyfikowaćSomething
, co jest zbyt dużym sprzężeniem. Samo dodanie nowegoSoemthingToCMapper
jest mniej uciążliwe.Biorąc pod uwagę, że nie wolno implementować interfejsów wielokrotnych, możesz rozważyć zastosowanie enkapsulacji. (przykład przy użyciu java8 +)
Sprawdź tutaj, aby uzyskać więcej informacji i więcej przykładów: Jak stworzyć klasę Java, która implementuje jeden interfejs z dwoma rodzajami ogólnymi? .
źródło
Jeśli chcesz zmapować użytkownika na UserDTO i zmapować użytkownika na UserViewModel, będziesz potrzebować dwóch osobnych implementacji. Nie łącz tej całej logiki w jedną klasę - nie ma sensu tego robić.
Zaktualizuj, aby uszczęśliwić Joachima
Ale teraz jesteśmy w sferze Automapper ( http://automapper.codeplex.com/wikipage?title=Custom%20Type%20Converters )
źródło
IMappable
to dobre imię dla czegoś, co mapuje inne rzeczy.Mapper
(lubIMapper
, jeśli musisz ;-)) jest prawdopodobnie bardziej poprawny. (Nawiasem mówiąc: nie, to nie był mój głos).