Sto provando a scrivere una piccola app con limiti molto rigidi tra BLL e DAL e ora mi chiedo quale sarebbe il modo migliore per passare i dati (oggetti di trasferimento di dominio) tra gli strati.Come utilizzare DTO tra UI, BLL, DAL
Ho implementato alcune classi in un livello di dominio (libreria di classi) a cui si accede sia da BLL che da DAL. Queste classi fondamentalmente contengono solo proprietà/dati membri e attualmente riflettono i dati DAL. Es:
class CustomerData
{
// some data fields
}
Poi ho realizzato alcune classi in BLL come:
class Customer : CustomerData
{
// Some methods
}
Nel mio DAL ottengo i dati dei clienti dal database tramite LINQ to SQL. Ho poi mappare l'oggetto LINQ al mio oggetto Dominio da:
CustomerData.field = LinqObject.field
// Etc
Il mio pensiero è in tal modo che io ora un'istanza CustomerData dal mio DAL a BLL quando richiesto (e che avrei dovuto passare un istanza di Customer alla mia UI).
Nella mia BLL riceverò quindi un'istanza CustomerData, ma ora voglio farne un Cliente.
Domande:
- Devo a mio BLL ora creare un'istanza del cliente e di nuovo copiare tutti i membri di campo?
Cliente c = nuovo cliente; c.field = CustomerData.field; - Come posso creare un cliente da CustomerData senza le operazioni di copia campo?
- Dovrei piuttosto usare la composizione?
classe Cliente { Dati dati cliente; } - Esiste un modo più efficace (meno codifica, ecc.) Per eseguire questa operazione nel mio layout corrente?
- Esistono modi migliori per farlo?
- Eventuali commenti in generale?
Grazie!
Risposta di Yorah +8 per # 1. La codifica delle scimmie come quella potrebbe sembrare un dolore per te. Alla fine è in realtà la cosa sbagliata da fare a causa del grado in cui aumenta i bug e rende le cose come un dolore nel a $$. Prova anche ValuInjector - molti lo apprezzano meglio di AutoMapper, molto più leggero. Assicurati di riutilizzare i tuoi mapping. – FastAl