Un DTO per tabella di database o un DTO per classe di dominio

2

Recentemente ho posto questa domanda: Restituisci oggetti di dominio dal repository

Sono arrivato attraverso questo articolo: link . L'opzione 1 e parte dell'opzione 2 parlano di avere un oggetto di trasferimento dati per query e oggetti dominio per i comandi.

Supponiamo di avere un oggetto dominio come questo:

public class Order
{
  //Fields and properties for Order go here
  public List<OrderItem> OrderItems;
  //Methods for order go here.
}

Che aspetto avrebbero i DTO?

Opzione 1

Il DTO sembra identico all'oggetto dominio come questo:

 public class OrderDTO
    {
      //Fields and properties for Order go here
      public List<OrderItemDTO> OrderItems;
      //Methods for order go here.
    }

vale a dire. un DTO verrebbe restituito al servizio dell'applicazione contenente Ordini e Ordini.

Opzione 2a

Ci sarebbe un DTO per tabella di database (si noti nell'esempio seguente che non esiste una raccolta OrderItemDTO in OrderDTO:

public class OrderDTO
        {
          //Fields and properties for Order go here
          public List<OrderItemDTO> OrderItems;
          //Methods for order go here.
        }

public class OrderItemDTO
{
  //Fields and properties for OrderItem go here
          //Methods for OrderItem go here.
}

vale a dire. due oggetti DTO vengono restituiti al servizio dell'applicazione.

Opzione 2b

Come per l'opzione 2 tranne per il fatto che inserisco una raccolta di chiavi esterne (per OrderItemDTO nella classe Order).

Quale opzione è "migliore", ad esempio l'opzione 1 o l'opzione 2.

    
posta w0051977 12.08.2017 - 13:38
fonte

1 risposta

2

La mia risposta è, nessuna delle precedenti.

Creo DTO come e quando è necessario per adattarsi alla forma dei dati proiettati dalle mie operazioni di accesso ai dati. Le mie applicazioni tendono verso un'architettura CQRS e di conseguenza i miei DTO rappresentano le esigenze specifiche di query o comandi.

E per continuare, stavo per premere il pulsante di invio senza leggere l'articolo a cui ti sei collegato.

Dopo averlo letto, l'articolo è molto interessante ma hai presentato solo le due categorie DTO meno sofisticate (0 e 1 nell'articolo) delle quattro discusse.

Usando le categorie di utilizzo DTO 0, 1, 2 e 3 dell'autore, aspiro a un puro design di categoria 3, ma a volte cado nella categoria 2.

Hai chiesto una preferenza su alcuni esempi di DTO nella tua domanda. Dal mio punto di vista, tutte queste cose incoraggiano un'architettura di "entity server" di cui ho poco entusiasmo.

    
risposta data 12.08.2017 - 15:32
fonte

Leggi altre domande sui tag