È normale "reidratare" DTO in oggetti completi con relazioni quando si consumano servizi Web?

1

Stiamo progettando un'API Web per trasferire oggetti ottenuti da un database a un'applicazione client che è una GUI front-end. La logica di business lato server verrà implementata (nel bene o nel male) nei processi memorizzati.

Per minimizzare la dimensione degli oggetti trasferiti, gli ID interi verranno inviati nel caso in cui un oggetto faccia riferimento a un altro oggetto solo l'ID viene inviato, ad esempio un record del cliente potrebbe consistere in customer id, nome, indirizzo e company_id e ci sarebbe un metodo separato per inviare società che potrebbero essere rappresentate da company_id, name.

Quindi il client avrà un set di oggetti DTO minimi con solo campi dati senza riferimenti a oggetti. La mia domanda è se sia normale prendere questi oggetti e poi usarli per costruire oggetti più ricchi che contengono riferimenti ad altri oggetti? Ulteriori funzionalità aziendali possono anche essere aggiunte a questi oggetti.

Quindi, ad esempio, un oggetto Cliente potrebbe contenere un riferimento a un oggetto Società. Ciò significherebbe avere due versioni di ogni tipo di oggetto. Uno che è un DTO e uno che credo sia un oggetto aziendale.

Oppure avrebbe senso avere un solo tipo di oggetto che ha tutto, con campi ID e di riferimento che vengono popolati dopo che tutti gli oggetti sono stati estratti dal servizio web?

    
posta Shane 04.06.2018 - 09:38
fonte

1 risposta

1

Innanzitutto, non importa se i tuoi oggetti DTO provengono da un'API Web o da un database, sono persistenti da qualche parte e il problema essenziale è lo stesso in entrambe le situazioni. Quindi diciamo che quegli oggetti DTO vivono in un livello di accesso ai dati (DAL) e gli oggetti di business in un livello aziendale (BLL).

Ci sono persone che preferiscono avere un DAL e un BLL separati, anche se questo porta a un sacco di codice dall'aspetto simile in entrambi i livelli (per esempio un DalCustomer e un BllCustomer like in questa vecchia domanda SE ).

E c'è anche l'approccio di evitare questa duplicazione usando un framework ORM che rende questa distinzione abbastanza obsoleta (vedi la discussione sotto la domanda collegata, e anche le risposte controverse).

Quindi l'approccio che scegli dipende da te, dovrebbe dipendere dagli strumenti che hai a disposizione. Tuttavia, consiglio di prendermi cura di due cose

  • prendere una decisione per l'approccio one , non mescolarli.

  • evitare di dover scrivere manualmente il codice duplicato o standard. Ad esempio, se puoi generare i tuoi DTO o parti di oggetti BLL dai meta dati dell'API web, ti consiglio di farlo. Se vai per DAL e BLL separati, guarda se puoi utilizzare qualcosa come un automapper.

risposta data 04.06.2018 - 18:06
fonte

Leggi altre domande sui tag