Se non si utilizza uno strumento ORM, è necessario eseguire personalmente l'ORM. Sfortunatamente, ORM aggiunge un alto livello di complessità. Esistono alcune strategie per affrontare le sfide alle quali hai fatto riferimento.
Includi il repository nell'oggetto dominio
Pro: consente il caricamento lento. Il modello di dominio mantiene la manipolazione dei dati piuttosto semplice mentre consente al componente del repository di eseguire il livello di persistenza.
Con : potresti causare più chiamate al database in alcuni casi in cui uno sarebbe stato sufficiente. Può essere più difficile usare il database per fare il filtraggio per te. Ciò significa maggiore utilizzo della memoria e manipolazione degli oggetti.
Serializza tutto dal repository
Pro: Hai il pieno controllo del processo di persistenza senza attivare chiamate successive al database. Puoi usare il database per applicare filtri, ecc. Molto più facilmente.
Con: Può essere molto costoso quando tutto ciò di cui hai bisogno è un sommario dei dati in un elenco di grandi dimensioni.
Qualcosa in mezzo
Alcune lezioni che ho imparato durante la progettazione di un'app su un database NoSQL mi hanno fatto riflettere in modo un po 'diverso su come stavo separando i dati. So che per il momento quella soluzione è fuori dal tavolo. Tuttavia, alcune delle stesse strategie si applicano a DDD:
- Pensa a dove deve essere la separazione. Ho scoperto che alcuni oggetti "di riferimento" leggeri erano ottimi per fornire le informazioni di riepilogo per gli elenchi, senza ottenere tutto dai bambini. Ottenere il genitore e gli oggetti figlio di riferimento è stato abbastanza veloce e permettimi di popolare completamente lo schermo.
- Non aggiungere nulla di cui non hai bisogno finché non ne hai bisogno. Se si sceglie di ottenere tutto in una volta e questo inizia a rallentare l'app, è possibile aggiungere la complessità del caricamento lento quindi.
- Aggiungi test man mano che procedi.
Il DDD è sia potente che diverso dalle attuali conoscenze su come creare applicazioni. Trovo che il DDD favorisca gli ambienti in cui tutto è in un livello come un'applicazione desktop. Con le applicazioni Web, è necessario essere in grado di serializzare oggetti da e verso JSON e fare in modo che lo schermo reagisca in modo appropriato. La logica che applichi scrupolosamente nel livello dell'applicazione Web non viene trasmessa automaticamente al browser web. Penso che sia per questo che il modello di dominio anemico è un po 'più popolare in questi giorni.
Dirò che l'utilizzo di un database NoSQL risolve un certo numero di problemi che circondano la complessità che è ORM. Se / quando puoi dare un'occhiata a questo, vedrai come risolve un certo numero di problemi per te.