Accoppiamento molto allentato e Iniezione delle dipendenze per la gestione dei database

1

Attualmente sto configurando un database MongoDB per un'applicazione web. Sto eseguendo node.js e utilizzando Mongoose per aiutare a gestire la mappatura, la validazione ect.

Mi chiedo se sia una buona idea disaccoppiare veramente MongoDB dal mio codice, solo per la possibilità di passare a qualcosa come CouchDB un po 'più tardi. Nello specifico, creo un modulo databaseManger che è responsabile della configurazione di Mongoose / Mongo, che definisce i modelli di mangusta, gestisce i set di repliche e fa alcune validazioni extra. Questo gestore esporterebbe un'API generica e gestirà internamente i dettagli delle query. Il gestore sarebbe quindi passato in giro tramite l'iniezione di dipendenza.

Ha senso? O sono in grado di ripristinare alcune delle funzionalità di mangusta?

Qualsiasi consiglio è apprezzato.

    
posta Colin Martell 24.07.2013 - 18:56
fonte

2 risposte

2

Cerco sempre di astrarre l'accesso ai dati dal mio codice applicazione. In node.js, creo repository per la gestione dell'accesso ai dati a qualsiasi elemento di livello superiore (aggregato-root, in termini DDD).

Questi repository espongono all'applicazione una API molto pulita e adatta ai domini, che nasconde qualsiasi dettaglio di implementazione, ad esempio se utilizza MySQL o MongoDB come back-end. Converte anche i dati restituiti dal database grezzo, in un oggetto dominio appropriato.

In un linguaggio più tradizionale, alcuni di questi metodi apparirebbero come questo (usiamo un repository di annunci come esempio):

Ad #find(id)
Ad[] #findAll()
Ad[] #findByVendor(vendor)

O, più asincrono:

#find(id, cb)
#findAll(cb)

Questi callback devono accettare err e quindi gli oggetti di dominio costruiti come secondo parametro data .

Inoltre, cerca di evitare solo le interazioni CRUD di base, ma cerca di esporre le cose che hanno realmente un significato nella tua applicazione.

L'altro vantaggio è che il codice dell'applicazione è molto più facile da testare in isolamento, perché non sta parlando direttamente con MongoDB o Mongoose.

    
risposta data 24.07.2013 - 19:21
fonte
1

Oltre alla risposta accettata, potresti essere interessato a guardare alcuni dei discorsi di zio Bob Martin sull'architettura pulita. Ne esistono diversi su YouTube, ad esempio.

    
risposta data 25.07.2013 - 00:05
fonte