2016-01-25 17 views
8

Usando Spring MVC, normalmente vediamo il livello Controller, Service e Repository. Il livello di repository utilizza il modello di entità che è l'associazione uno a uno con il database. Ho pensato di seguito -Architettura MVC DTO/Mappatura/conversione modello

  1. Il livello di servizio deve utilizzare lo stesso modello di entità?
  2. Il livello di servizio deve utilizzare un modello di dominio separato? Se sì, la mappatura di andata e ritorno dovrebbe essere effettuata nel livello di servizio?
  3. Nel caso del livello Controller si utilizza lo stesso modello di dominio?
  4. Il livello controller deve utilizzare un modello DTO separato? Se sì, la mappatura di andata e ritorno dovrebbe essere fatta nel livello Controller?
  5. Abbiamo un modo semplice per eseguire la mappatura senza scrivere troppo codice dettagliato? Ho usato Dozer poche volte in passato.

Questa domanda potrebbe essere stata chiesta ma non ho trovato. Quindi scusami per una domanda doppia.

risposta

5
  1. Sì.
  2. No. Il servizio dovrebbe funzionare sul modello Entity restituito dall'oggetto Repository.
  3. No. Il controller deve utilizzare DTO. Il DTO dovrebbe contenere i campi del modulo e le annotazioni di convalida (se si utilizza JSR303).
  4. Sì. I DTO sono usati nel livello Controller. I DTO dovrebbero esporre un costruttore che accetta il modello Entity. La conversione del modello Entity in DTO viene eseguita in questo costruttore. Stesso caso per il modello Entity. Il modello di entità dovrebbe anche esporre un costruttore sovraccarico che accetta l'oggetto DTO come argomento. La conversione del modello DTO in Entity dovrebbe avvenire qui.
  5. Il costruttore sovraccarico di DTO (Entity model as arg) e Entity model (DTO as arg) sono dettagliati.
+0

> Il modello di entità dovrebbe anche esporre un costruttore sovraccarico che accetta l'oggetto DTO come argomento Cosa succede se la mia entità ha entità dipendenti (cioè una relazione uno-a-molti)? In DTO, potrei memorizzare i rispettivi ID, ma la conversione DTO -> Entity richiederà il recupero di sottoentità da quegli ID. Qual è il metodo accettato per gestirlo? –

+1

In tal caso, creare un oggetto factory che gestirà la creazione e la conversione di DTO nel modello Entity. È possibile iniettare i propri servizi su questo oggetto factory per trovare gli oggetti con il loro id. – Bnrdo

4

1) sì,

2) n,

3,4) utilizzare entitys per l'uscita, ma utilizzano CommandObjects e DTOs (ma non delle Entità) per l'ingresso. Dipende dalla tua architettura, ma non vuoi che un client imponga il manoscritto su ogni campo delle tue entità, allora hai bisogno di separare gli oggetti usati per il mapping delle richieste (commandobject) dalle entità del tuo dominio.

+0

dove dovrei scrivere il codice di conversione da 'DTO' a' Entity' e viceversa? Dovrei convertire l'oggetto 'Entity' nella classe' DTO' usando un altro metodo pubblico per dire 'convertToEntity' e viceversa O dovrei scrivere Separate class per fare questo? –

+0

Nei miei progetti preferisco avere questo codice nell'entità. Ma nei miei progetti c'è anche una regola che afferma: che ogni proprietà di un'entità è di proprietà al massimo di un DTO .. ​​ – Ralph

+0

puoi fornire un esempio semplice? –