2015-11-22 5 views
0

У меня есть супер класс под названием Трансформатор. и у меня есть два производных класса, которые преобразуют класс A в B и наоборот. Существуют классы:Как избежать дублирования кода в объектах перевода?

class A{ 
    private Long id; 
    private String name; 

    ... getter and setters 
} 

class B{ 
    private Long id; 
    private String name; 

    ... getter and setters 
} 

interface Transformer<S,D> { 
    D convert(S source); 
} 

class ATransformer implements Transformer<A,B>{ 
    public B convert(A a){ 
     B b=new B(); 
     b.setId(a.getId()); 
     ..... 
     return b; 
    } 
} 

class BTransformer implements Transformer<B,A>{ 
    public A convert(B b){ 
     A a=new A(); 
     a.setId(b.getId()); 
     ..... 
     return a; 
    } 
} 

Как вы видите, производные классы трансформаторов имеют повторяющиеся коды. Есть ли какой-либо дизайн или решение, чтобы избежать дублирования без использования рефлексии?

+0

Кажется, вам не нужны несколько классов. –

+0

В чем разница между А и В, отличной от имени класса? –

+0

@ cricket_007 например A - это мое сущность, а B - мое dto – Pooya

ответ

-1

Создание класса C и продолжается A и B от C Однако Convertion есть, если обусловленно только вы не используете отливать :)

0

Вы можете использовать структуру боба сопоставителя как Dozer или orika, чтобы сделать работу для вас (и запасные вы дублируете код). Однако, как уже упоминалось в других комментариях, в большинстве случаев предпочтительнее избегать классов, которые почти одинаковы, если они не находятся в одной и той же иерархии класса и, следовательно, защищены.

+0

Да, но они решают проблему в режиме отражения – Pooya

+0

Нет, orika использует генерацию байтового кода - не требуется никакого отражения – Nitek

Смежные вопросы