Stiamo creando un'app Web utilizzando AngularJS, C#, API Web ASP.Net e Fluent NHibernate. Abbiamo deciso di utilizzare i DTO per trasferire i dati al livello di presentazione (viste angolari). Ho avuto qualche dubbio riguardo alla strutturazione e alla denominazione generale dei DTO. Ecco un esempio per illustrare il mio scenario. Diciamo che ho un'entità dominio chiamato cliente che si presenta come:Convenzioni di denominazione DTO, modellazione ed ereditarietà
public class Customer
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual Address Address { get; set; }
public virtual ICollection<Account> Accounts { get; set; }
}
Ora, nel mio punto di vista/strato di presentazione ho bisogno di recuperare i diversi gusti di clienti come:
1) Basta Id e nome 2) Id, nome e indirizzo 3) Id, Nome, Indirizzo e Bilancio
ho creato una serie di DTOs per raggiungere questo obiettivo:
public class CustomerEntry
{
public int Id { get; set; }
public string Name { get; set; }
}
public class CustomerWithAddress : CustomerEntry
{
public AddressDetails Address { get; set; }
}
public class CustomerWithAddressAndAccounts : CustomerWithAddress
{
public ICollection<AccountDetails> Accounts { get; set; }
}
AddressDetails e AccountDetails sono DTO che hanno tutte le proprietà delle rispettive entità di dominio corrispondenti.
Questo funziona perfettamente per query e dati recuperati; la domanda è cosa devo usare per inserti e aggiornamenti. Durante la creazione di un nuovo record del cliente, il nome e l'indirizzo sono obbligatori e gli account sono facoltativi. In altre parole, ho bisogno di un oggetto con tutte le proprietà del cliente. Da qui la confusione:
1) Cosa uso per inserire e aggiornare? Il DTO CustomerWithAddressAndAccounts ha tutto in esso ma il suo nome sembra un po 'scomodo da utilizzare per inserimento/aggiornamenti.
2) Creo un altro DTO .. se lo faccio, non sarebbe una duplicazione dato che il nuovo DTO sarà esattamente come CustomerWithAddressAndAccounts?
3) Ultimo ma non meno importante, l'eredità di DTO strcuture descritta sopra sembra una buona misura per il requisito? Ci sono altri modi per modellarlo?
Ho passato altri post su questo argomento ma non ho potuto fare molti progressi. Una cosa che ho scelto è stata evitare di usare il suffisso "DTO" nei nomi delle classi. Penso che sia un po 'superfluo.
piacerebbe sentire i vostri pensieri
Grazie
Grazie per la risposta. Una delle motivazioni per l'utilizzo di più classi DTO doveva essere un po 'più espressiva nel definire a cosa serve il DTO. Inoltre, se hai solo bisogno di Id e Nome, dovresti davvero inviare l'intero CustomerEntryDTO (che hai descritto) sul filo? – Sennin
@Sennin Ho modificato la mia risposta in base al tuo commento ma penso che la mia risposta sarebbe ancora incompleta per te. Forse lo modificherò in seguito per aggiungere altro sul tuo commento sopra. – VS1
@Sennin pls vedere la mia modifica 2. – VS1