Molti tutorial su DDD che ho studiato riguardano principalmente la teoria. Tutti hanno esempi di codice rudimentale (Pluralsight e simili).
Sul web ci sono anche tentativi da parte di alcune persone di creare tutorial che trattano DDD con EF. Se inizi a studiarli solo brevemente, noti rapidamente che differiscono molto l'uno dall'altro. Alcune persone raccomandano di ridurre al minimo l'app ed evitare di introdurre livelli aggiuntivi, ad esempio un repository in cima a EF , altri stanno decisamente generando livelli extra, spesso anche violando SRP iniettando DbContext
in Radici aggregate.
Mi sto scusando terribilmente se sto facendo una domanda basata sull'opinione, ma ...
Quando si tratta di pratica, Entity Framework è uno degli ORM più potenti e ampiamente utilizzati. Sfortunatamente, non troverai un corso completo su DDD.
Aspetti importanti:
Entity Framework porta UoW & Repository (
DbSet
) fuori dalla scatolacon EF i tuoi modelli hanno proprietà di navigazione
con EF tutti i modelli sono sempre disponibili off
DbContext
(sono rappresentati come aDbSet
)
insidie:
non puoi garantire che i tuoi modelli figlio siano interessati solo tramite Aggregate Root: i tuoi modelli hanno proprietà di navigazione ed è possibile modificarli e chiamare
dbContext.SaveChanges()
con
DbContext
te puoi accedere ad ogni tuo modello, aggirando così la radice aggregataè possibile limitare l'accesso ai figli dell'oggetto root tramite
ModelBuilder
inOnModelCreating
metodo contrassegnandoli come campi - io ancora non credere che sia il modo giusto per andare su di DDD, più è difficile valutare quale tipo di avventure questo può portare al futuro ( abbastanza scettico )
conflitti:
senza implementare un altro livello di repository che restituisce Aggregate non possiamo nemmeno parzialmente risolvere le insidie sopra menzionate
implementando un ulteriore livello di repository ignoriamo le funzionalità integrate di EF (ogni cosa
DbSet
è già un repository) e complichiamo eccessivamente l'app
La mia conclusione:
Per favore, scusate la mia ignoranza, ma in base alle informazioni di cui sopra: Entity Framework non è adeguato per il Domain-Driven Design o il Domain-Driven Design è un approccio imperfetto e obsoleto .
Sospetto che ciascuno degli approcci abbia i suoi meriti, ma ora sono completamente perso e non ho la minima idea di come conciliare EF e DDD.
Se sbaglio - qualcuno potrebbe almeno dettagliare un semplice set di istruzioni (o anche fornire esempi di codice decente) su come procedere con DDD con EF, per favore?