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ę?
źródło
Odpowiedzi:
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.
źródło