2016-01-25 16 views
8

Korzystając ze Spring MVC zwykle widzimy warstwę kontrolera, usługi i repozytorium. Warstwa repozytorium używa modelu encji, który jest odwzorowaniem jeden na jeden z bazą danych. Myślałem o następujących -Architektura MVC Odwzorowanie/konwersja modelu/modelu

  1. Czy warstwa usługi ma korzystać z tego samego modelu encji?
  2. Czy warstwa usług powinna korzystać z oddzielnego modelu domeny? Jeśli tak, to odwzorowanie "do"/"do przodu" powinno być wykonane w warstwie serwisowej?
  3. Czy w przypadku warstwy kontrolera używamy tego samego modelu domeny?
  4. Czy warstwa kontrolera powinna korzystać z oddzielnego modelu DTO? Jeśli tak, to odwzorowanie "do"/"do" należy wykonać w warstwie sterownika?
  5. Czy mamy jakiś prosty sposób na mapowanie bez pisania zbyt obszernego kodu? W przeszłości używałem Dozer kilka razy.

To pytanie mogło zostać zadane, ale nie mogłem go znaleźć. Przepraszam za duplikat pytania.

Odpowiedz

5
  1. Tak.
  2. Nie. Usługa powinna działać w modelu jednostki zwracanym przez obiekt repozytorium.
  3. Nie. Kontroler powinien używać DTO. DTO powinien zawierać pola formularza i adnotacje sprawdzania poprawności (jeśli używasz JSR303).
  4. Tak. DTO są używane w warstwie kontrolera. DTO powinny udostępniać konstruktor akceptujący model Entity. Konwersja modelu encji na DTO odbywa się w tym konstruktorze. Ten sam przypadek dla modelu jednostki. Model encji powinien także eksponować przeciążony konstruktor, który akceptuje obiekt DTO jako argument. Konwersja DTO do modelu jednostki powinna nastąpić tutaj.
  5. Przeciążony konstruktor DTO (model Entity jako arg) i model Entity (DTO as arg) są pełne.
+0

> Model encji powinien również wystawiać przeciążony konstruktor, który akceptuje obiekt DTO jako argument Co zrobić, jeśli mój podmiot ma zależne elementy (tj. Związek jeden-do-wielu)? W DTO mogę przechowywać ich odpowiednie identyfikatory, ale konwersja DTO -> Entity będzie wymagać pobrania podsieci przez te identyfikatory. Jaka jest zaakceptowana metoda obsługi tego? –

+1

W takim przypadku utwórz obiekt fabryczny, który będzie zarządzał tworzeniem i konwersją DTO do modelu jednostki. Możesz wprowadzić swoje usługi do tego obiektu fabryki, aby znaleźć obiekty według ich identyfikatora. – Bnrdo

4

1) tak,

2) nie,

3,4) stosowanie entitys wyjścia, ale użyć CommandObjects i DTOS (ale nie podmiotów) do wprowadzania. To zależy od twojej architektury, ale nie chcę, aby klient zarządzał każdym polem twoich jednostek, musisz oddzielić obiekty używane do mapowania żądań (komend) od twoich jednostek domeny.

+0

gdzie powinienem zapisać kod konwersji z 'DTO' na' Entity' i na odwrót? Czy powinienem przekonwertować obiekt 'Entity' w klasie' DTO' przy użyciu innej publicznej metody, powiedz 'convertToEntity' i na odwrót. Czy powinienem napisać osobną klasę? –

+0

W moich projektach preferuję ten kod w encji. Ale w moich projektach jest też zasada, która stwierdza: że każda własność danego podmiotu jest własnością co najwyżej jednego DTO .. ​​ – Ralph

+0

czy możesz podać prosty przykład? –