DDD + noSQL = true story

C’è molto fermento nel mondo DDD per quanto riguarda l’adozione di database documentali al posto di database relazionali + ORM.

Oggi fuori piove copiosamente ed ho deciso di trascorrere la giornata a capire se un database documentale fosse adottabile in maniera semplice in questo contesto.
Conclusione: si, un database documentale calza in maniera davvero naturale su un domain model, tanto da poter fare a meno di implementare un repository pattern!
Certo, potrete continuare a separare il layer dei dati con il layer della logica di business con questo pattern, ma a questo punto il tutto sembra essere solo una perdita di tempo…
Le mie considerazioni sono confermate da questo post

Elenco alcuni punti dove reputo che un db noSQL non abbia rivali:
schema-less: la mancanza di schema mi permette di persistere aggregate anche molto complessi con meno di 10 righe di codice, mentre con un ORM dovrei lavorare molto di più.
auto-indexing: mi sono concentrato su RavenDB, non so se altri database documentali lo facciano o meno, tuttavia, RavenDB si auto crea gli indici sulle collection e questo permette di avere performance incredibili e adattative all’utilizzo che si fa del software.
versioning: essendo un record/documento privo di schema, nessuno mi impedisce di aggiungere proprietà nuove e persisterle senza praticamente fare nulla se non aggiungere proprietà nelle classi del domain model.
linq: ovvero la capacità di interrogare i dati con un idioma object-oriented + intellisense, cosa che i domain expert apprezzeranno e non poco!
testability: RavenDB permette di far girare un DB uguale in tutto e per tutto a quello in produzione, in memoria, impennando le performance dei test e evitando di farci impazzire.

A questo punto mi domando seriamente, perchè devo persistere un modello ad oggetti su un DB piatto come SQL Server… perchè metterci in mezzo tutta l’astrazione di un ORM?
Non sto dicendo assolutamente che SQL Server è inutile, solo che in un contesto DDD non si sposa affatto bene.
Inoltre un ORM per quante funzioni abbia resta una cosa in più da gestire, quindi tradotto in soldi, un investimento in più da fare!

2 pensieri su “DDD + noSQL = true story

  1. ste dice:

    Premesso che non so niente di noSQL mi chiedo… di che applicativi e dimensioni di database parliamo? Salvataggio in formato Json niente struttura ecc…
    Non è che il discorso cambia a seconda del dominio e della mole di dati?
    Cioè un’azienda che fa 100 fatture al mese è una cosa ma una banca che fa 100 movimenti agni ora ?

    • Simone Ciamberlini dice:

      In realtà con la potenza dei server e il costo dei terabyte attuale, il problema delle moli di dati sono quasi sempre aggirabili scalando verticalmente o orizzontalmente.
      Ultimamente ho avuto sotto le mani server con 48 processori e 128GB di RAM, non sono fantascienza 🙂
      In realtà con noSQL ti risparmi l’adozione di un ORM (e non è poco) ma ti sobbarchi il problema dell’eventually consistent.
      In poche parole: dipende dallo scenario!

Rispondi