2014-08-29 11 views
5

W prostych słowach, dlaczego potrzebujemy "usługi bean do mapowania fasoli" (jak Dozer) w aplikacji internetowej.Dlaczego potrzebujemy fasoli do mapera fasoli, takiego jak spychacz w aplikacji sieciowej?

Załóżmy, że pracuję nad usługą sieciową.

  1. Otrzymuję XML na żądanie.
  2. I pobrać wartości z elementów XML.
  3. Wykonaj wymaganą operację na pobranych wartościach.
  4. Przygotuj odpowiedź XML.
  5. Wyślij odpowiedź XML jako odpowiedź

Dlaczego warto dodać jeden więcej etapów odwzorowywania elementów XML na własne niestandardowe elementy.

Nie jestem w stanie przekonać samego siebie, prawdopodobnie dlatego, że nie jestem w stanie wymyślić lepszej sytuacji/przyczyny.

Proszę sugerować, na przykład, jeśli to możliwe.

+1

Jeśli go nie widzisz, nie potrzebujesz go. –

+0

@FlorentBayle, jest używany w bardzo podobnym projekcie. – reiley

+0

To nie znaczy, że tego potrzebujesz. Może być użyty z przyczyn historycznych, z niewłaściwych powodów, aby odpowiedzieć na potrzebę, z którą nie będziesz musiał się zmierzyć, ... Musisz zapytać drugi projekt, dlaczego dokonano tego wyboru. –

Odpowiedz

4

Pomaga zmniejszyć powiązanie między prezentacją (tj. Schematem XML) a logiką biznesową. Na przykład w przypadku zmian schematów nie trzeba dotykać logiki biznesowej, tylko mapowania między obiektami.

W prostych przypadkach może nie być warta dodatkowej złożoności. Ale jeśli obiekty są szeroko wykorzystywane w komponencie logiki biznesowej, powinieneś to rozważyć.

2

Tak jak krótka odpowiedź, opisywany przez Ciebie przypadek nie jest jedyny :).

Załóżmy, że pracujesz z biblioteką wewnętrzną dostarczającą niektóre komponenty POJO/encje/inne. Chcesz abstrahować od wewnętrznej reprezentacji (z jakiegoś powodu lub anohtera), a następnie chcesz zmapować te ziarna do twoich. To działa:

  • dla ejb klienta lub somehting takiego,
  • gdy nie chcesz, aby odsłonić wewnętrzny podmioty (Object biznesowy vs obiektu prezentacja) (patrz @ post Henry'ego)
  • masz fasoli, które nie dziedziczą z tego samego rodzica (i nie może z jakiegokolwiek powodu, nawet leacy) i chcesz tarnsfert wartości od do innego

Istnieje wiele przyczyn (innych) :)

Jako rad zobaczyć również i tym poście: any tool for java object to object mapping?

0

Krótka odpowiedź dla mnie jak Henry powiedział, że pomaga zmniejszyć sprzężenie pomiędzy tym, co naraża lub konsumować i twój podstawowy model danych.

Jest to jednokierunkowy plik Hexagonal Architecture. Możesz dowolnie modyfikować swój podstawowy model bez wpływu na odsłonięty model. W architekturze heksagonalnej służy on do ujawnienia tylko niewielkiej istotnej części modelu podstawowego.

Jest to również bardzo elastyczny sposób obsługi usług i modelowania wersji, ponieważ wiele wersji można odwzorować na model podstawowy.

Pracując z usługami XML, mam tendencję do budowania pierwszej aplikacji, więc najpierw piszę XMLSchema, a następnie generuję Jaxbeans i naprawdę nie chcę, aby mój kod biznesowy był zanieczyszczony adnotacjami JAxb.

Jeśli wiesz, że Twój odsłonięty model będzie zawsze taki sam, a twoja aplikacja nie będzie się mieściła we wcześniej wspomnianych przypadkach, to naprawdę nie musisz używać DTO.

Ostatecznie, polecam użycie architektury z silnym sprawdzaniem czasu kompilacji, jak Selma zamiast Dozer lub Orika, ponieważ oceniają mapowanie tylko w czasie wykonywania, które jest słabe i sensowne do refaktoryzacji.

Powiązane problemy