Angolare + WebAPI: DTO shapings Client vs Server

1

Attualmente sto creando una piccola app per pagina singola. Sto usando l'API Web Angular e ASP.Net Core 2. Dal lato server, sto anche usando l'approccio DDD (solo per scopi di apprendimento, l'app non è abbastanza grande per usare il DDD in modo ragionevole), quindi sto mappando le mie entità di dominio su DTO.

Ecco un esempio di un oggetto dominio, che rappresenta una domanda di apprendimento, l'ho chiamato "Fatto":

   public class Fact : AggregateRoot
    {
        public Fact(
            string id,
            string questionText,
            string anwerText,
            DateTime creationDate) : base(id)
        {
            Guard.StringNotNullOrEmpty(() => questionText);

            QuestionText = questionText;
            AnswerText = anwerText;
            CreationDate = creationDate;
        }

        public string AnswerText { get; private set; }
        public DateTime CreationDate { get; private set; }
        public string QuestionText { get; private set; }
    }

Su un sidenode: è deserializzato e serializzato per MongoDB, ecco perché i setter sono privati, dato che non può deserializzare le proprietà readonly.

Ora, una cosa interessante, non ho trovato una risposta definitiva per: vedo due possibilità per modellare entità di dominio su DTO:

  • L'approccio accademico REST, quindi il mio FactsController tornerebbe praticamente un FactDto, che ha tutte (o quasi) le proprietà di Oggetto dominio sopra
  • Lo mappo alle esigenze della mia singola app pag, ad esempio FactEditDto, FactOverviewEntryDto, ecc. Quindi più dell'approccio ViewModel

Ho visto entrambi gli approcci e, ripensandoci, vedo cons e pro in entrambi i modi:

Un DTO di risorsa per entità:

  • Riusabilità, suppongo che ad esempio VSTS stia utilizzando lo stesso servizio REST Posso anche chiamare l'interfaccia utente
  • Applica meglio i principi REST

DTO per "Visualizza":

  • File JSON più piccoli, più efficaci
  • La mappatura può essere effettuata sul server, ad esempio tramite AutoMapper
  • Più facile comunicare per dati specifici, ad esempio potrei concat sub-risorse in un DTO o passare una "azione" con tutti i dati necessari
  • Pochissima riusabilità

Un esempio molto interessante è di Microsoft stesso: link In questo, inviano due DTO, uno per i dettagli, che non sembra molto simile a REST?

Esiste un consenso pubblico su quell'argomento e i compromessi di entrambe le possibilità?

    
posta Matthias Müller 29.03.2018 - 21:40
fonte

0 risposte

Leggi altre domande sui tag