Le proprietà in Data Transfer Object espandono le chiavi esterne o espongono semplicemente le loro chiavi primarie

StackOverflow https://stackoverflow.com/questions/5392093

Domanda

Ho un EmployeeDTO che rappresenta un record Employee nel database.La tabella Employee ha una relazione con un dipartimento e una relazione uno a molti con l'autorizzazione.

Nelle mie entità, questi sono rappresentati come una proprietà Department completamente espansa e un elenco di oggetti autorizzazione completamente espansi.

La domanda è: il DTO dovrebbe avere una proprietà DepartmentDTO completamente espansa di un DepartmentId?Il DTO dovrebbe avere un elenco di proprietà PermissionDTO completamente espanse di List of PermissionId?

È stato utile?

Soluzione

Proprio come tutto nel design, dipende dalle tue esigenze.

  • Se hai bisogno di vedere spesso e bind a proprietà figlio e vuoi per renderlo il più semplice possibile sviluppatori per utilizzare i tuoi DTO, potresti vogliono metodi di fabbrica espliciti da dare hai completamente espanso le proprietà figlio.
  • Se vuoi la semplicità del codice, non farlo espandere le proprietà della chiave esterna e lascia che gli sviluppatori prendano il bambino oggetto / collezioni che vogliono per chiave secondo necessità.

Potresti incontrare problemi con la ricorsione; espandi anche tutte le proprietà della chiave esterna dell'oggetto Department? E se c'è un riferimento a un altro EmployeeDTO in una sottoclasse di Dipartimento?

Entity Framework di Microsoft, così come altri framework di oggetti di business popolari, gestiscono questo concetto mediante caricamento lento: recupera la proprietà figlio espansa completa solo se è richiesta dal codice. Questa è probabilmente la soluzione più flessibile, ma ha un piccolo sovraccarico / ritardo poiché le proprietà figlio non possono essere recuperate nella stessa chiamata al database dell'oggetto padre. Questi ovviamente non sono puramente DTO.

Altri suggerimenti

Sì e No. Dipende dalla chiamata e dalla necessità di tutte le proprietà extra in ogni chiamata.Può anche dipendere dalla tecnologia ORM che utilizzi, che può implementare il caricamento lento e può influire sulla tua decisione (se stai passando oggetti entità semplici anche se non è consigliato ).

È comune creare un caso DTO contenente tutte le proprietà necessarie e uno o più oggetti DTO che espongono più funzionalità e vengono utilizzati altri metodi.Ad esempio, ho una classe BasicUser che contiene solo UserName e DisplayName e ho User che ne contiene di più, inclusi Permissions ed inherits da `BasicUser.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top