Wzorzec projektowy do konwersji obiektów (java)

21

Nie używam często wzorców projektowych, oprócz okazjonalnej fabryki i MVC, i chcę zacząć z nich korzystać częściej.

Mam pod ręką konkretny przypadek, w którym chciałbym poznać Twoją opinię na temat wykorzystania wzorów projektowych w tym przypadku.

W mojej aplikacji muszę często konwertować obiekty w różnych sytuacjach. Być może będę musiał przekonwertować Hibernację POJO na DTO, ponieważ używam GWT i Hibernacji POJO nie są serializowane i nie można ich przesłać przez linię.

W innej sytuacji może być konieczne przekonwertowanie obiektów Java na obiekty SolrInputDocument w celu indeksowania przez Solr.

Chciałbym wiedzieć, czy powinienem użyć do tego wzoru projektowego. Wygląda na to, że „konwersja obiektów” jest ogólnym zadaniem, które można wykonać w elastyczny / abstrakcyjny sposób za pomocą wzorca, ale tak naprawdę nie rozumiem, jak to zrobić.

Bez wzorców stworzyłbym po prostu osobną klasę dla każdego typu konwersji, na przykład CourseToSolrInputDocument (kurs jest jednostką hibernacji w mojej aplikacji). Lub CourseToCourseDTO. Każda z tych klas konwersji może mieć pojedynczą wywoływaną metodę statyczną, convert()która pobiera obiekt źródłowy jako dane wejściowe i zwraca obiekt wyjściowy.

Ale to nie jest tak naprawdę wzór, prawda? Więc zacząłem od czegoś z generics i stworzyłem tę klasę, która implementuje interfejs konwertera. Ale wydaje mi się, że głupie jest tworzenie ogólnego interfejsu i tak naprawdę nie widzę przewagi poza gratulowaniem sobie używania ogólnych.

public class CourseToSolrInputDocument implements Converter<Course, SolrInputDocument>         {
    @Override
    public void convert(Course source, SolrInputDocument destination) {
        //To change body of implemented methods use File | Settings | File Templates.
    }
}

Tak więc prawdziwe pytanie brzmi: czy istnieje wzorzec, który ma zastosowanie do ogólnej konwersji obiektów i jakie byłoby twoje podejście i jakie są zalety w porównaniu z zastosowaniem podejścia typu klasa na konwersję?

Juliusz
źródło
Wzory to więcej nazw dla tego, co robisz (i przykład, jak to zrobić poprawnie), niż coś niesamowitego w użyciu. Lepszym pytaniem niż to, w jaki sposób mogę użyć większej liczby wzorów, jest: Jakie wzory już używam (może w jakiś niekompletny / zawiły sposób).
user470365

Odpowiedzi:

18

Tłumacz Wzór jest co prosisz.

Podejrzewam jednak, że to, czego szukasz, to ramy, a nie wzór. Wierzę, że Dozer jest popularny w świecie Java.

pdr
źródło
Znam Dozer i Apache Beanutils. Chciałbym użyć jednego z tych w mojej „strukturze konwersji”. W międzyczasie odkryłem, że Spring oferuje rozwiązanie do konwersji obiektów, które można znaleźć tutaj: static.springsource.org/spring/docs/3.0.0.RC3/reference/html/… . Widziałem to wcześniej, ale dawno temu, więc mój własny interfejs był w pewnym sensie oparty na tym, co zapamiętałem z Wiosny. Zamierzam wybrać rozwiązanie Spring, ponieważ Spring jest już w moim projekcie i wygląda na dobre podejście.
Julius