Mi è stato assegnato il compito di progettare il livello dati per un sito Web al lavoro e sono molto interessato all'architettura del codice per la massima flessibilità, manutenibilità e leggibilità.
In genere sono consapevole del valore nel separare completamente i miei modelli reali dal livello di accesso ai dati, in modo che i modelli siano completamente ingenui quando si tratta di accesso ai dati. E in questo caso è particolarmente utile farlo poiché i Modelli possono essere creati dal Database o possono essere creati da un servizio Web Soap.
Quindi mi sembra logico avere Factories nel mio livello di accesso ai dati che creano oggetti Model. Quindi ecco quello che ho finora (nel mio pseudocodice inventato):
class DataAccess.ProductsFromXml extends DataAccess.ProductFactory {}
class DataAccess.ProductsFromDatabase extends DataAccess.ProductFactory {}
Questi vengono quindi utilizzati nel controller in modo simile al seguente:
var xmlProductCreator = DataAccess.ProductsFromXml(xmlDataProvider);
var databaseProductCreator = DataAccess.ProductsFromXml(xmlDataProvider);
// Returns array of Product model objects
var XmlProducts = databaseProductCreator.Products();
// Returns array of Product model objects
var DbProducts = xmlProductCreator.Products();
Quindi la mia domanda è: questa è una buona struttura per il mio livello di accesso ai dati? È una buona idea usare una fabbrica per costruire gli oggetti del mio modello dai dati? Pensi che abbia frainteso qualcosa? E ci sono degli schemi generali su cui dovrei leggere per come scrivere i miei oggetti di accesso ai dati per creare gli oggetti del mio modello?