Breve introduzione: costruisco un'applicazione, utilizzando .NET, Entity Framework (EF) come ORM e SQL Server per la persistenza. La mia conoscenza di SQL Server va ben oltre le semplici richieste e io la uso per ridurre drasticamente le operazioni di DB. Comunque preferisco usare EF per tagliare scrivendo direttamente SQL quando possibile.
Ho un servizio di applicazione, per esempio IDogsService, che vorrei implementare nel nucleo. L'implementazione avrà il contesto EF (un repository) iniettato e dovrebbe usare il contesto iniettato per la persistenza. Questo è ciò che ritengo dovrebbe essere la mia architettura, secondo DDD.
Ma faccio tutto diversamente. Mentre l'interfaccia IDogsService è nel nucleo - l'implementazione è in un altro progetto. E quell'implementazione non ha iniettato alcun repository, semplicemente usa un contesto db interno, definito nello stesso progetto. La ragione di tale decisione è semplice: mentre il core non sa nulla del repository, l'implementazione di IDogService può comportarsi come vuole, quando si tratta di persistenza. E credo che il nucleo non dovrebbe preoccuparsi affatto dei repository.
Professionisti di tale approccio: il mio contesto db è in grado di utilizzare tutti i vantaggi di SQL Server, aumentando quindi le prestazioni. Contro: la logica di business del servizio viene spostata fuori dal centro (penso che dovrebbe rimanere nel nucleo).
Ho una strong sensazione che tutto questo è sbagliato e dovrebbe essere architettato un po 'diverso. Ma non so come. Non voglio davvero rivolgermi a uno schema di repository, poiché eliminerà i vantaggi di SQL Server a favore di altri RDBMS.
Qualche esperienza da condividere?