Il livello del repository dovrebbe restituire oggetti di trasferimento dati (DTO)?

Ho un livello di repository che è responsabile per il mio accesso ai dati, che è chiamato da un livello di servizio. Il livello di servizio restituisce DTOs che sono serializzati e inviati sul filo. Il più delle volte, i servizi fanno poco più che accedere a un repository e restituire qualsiasi cosa restituisca il repository.

Ma affinché funzioni, il repository deve restituire un’istanza di tale DTO. Altrimenti, dovresti prima mappare l’object del livello dati che il repository restituisce a un DTO nel livello di servizio e restituirlo. Sembra solo uno spreco.

Oltre a ciò, se la creazione dei DTO avviene nel livello di servizio, qualcosa che potrebbe essere stato fatto prima in una chiamata al repository e quindi una query di database, ora deve accadere con più chiamate di repository nel livello di servizio per ‘comporre’ il DTO finale. A meno che, naturalmente, non crei un object di trasporto tra il livello dati e il livello servizio che possa contenere un object così composto. Che poi deve essere mappato su un DTO. Sembra solo uno spreco per motivi di purezza. Ma sembra anche sbagliato che il livello del repository restituisca oggetti che esistono solo per essere inviati sul filo.

Risposta breve: No.

Risposta lunga: il repository è responsabile del ritorno dei dati persistenti alle quadro (modelli) e viceversa.

Il modello è un modello aziendale che rappresenta un’ quadro aziendale. DTO d’altra parte – mentre assomiglia a Model – riguarda il trasferimento dell’object tra vari ambienti e in sostanza è un object transitorio. Di solito i mappatori sono responsabili della trasformazione del modello in DTO.