Molti esempi che vedo utilizzando ASP.NET Core implicano uno o più dei seguenti elementi:
- App o API Web che configura un DbContext tramite l'iniezione delle dipendenze.
- Una libreria di classi che contiene un modello di dati di Entity Framework, il progetto di libreria a cui viene fatto riferimento tramite DI nel progetto Web.
- Un object mapper come AutoMapper, configurato all'interno della configurazione DI del progetto web / api in modo che la mappatura dell'oggetto sia definita una volta per gestire la mappatura dalle entità Db agli oggetti del modello.
Questo è l'ultimo bit, la "mappatura degli oggetti", che non sono sicuro se voglio usare, almeno non con l'approccio che sto prendendo.
Tuttavia, se uno dovesse passare & restituire gli oggetti del modello ai / dai metodi API e ai metodi della libreria, quindi perché preoccuparsi di un programma di mappatura degli oggetti se si deve già ottenere un set di risultati nella forma del modello che verrà utilizzata dall'app consumer? Quindi, in altre parole, lascia fuori il mappatore degli oggetti e approccia la situazione in questo modo:
- App Web / API che fa riferimento a una libreria di classi del livello Data tramite DI
- Libreria di classi del livello dati che contiene una classe repository che utilizza un DbContext EF.
- Ogni metodo nelle query della libreria di classi del livello dati contro DbContext, proietta i risultati in una classe modello (diversamente da quanto sopra con un oggetto mappatore)
- Le classi del modello definite in un progetto separato possono essere referenziate sia dal progetto web / api sia dal progetto del livello dati.
Si consideri:
- Il secondo approccio consente alla libreria del livello dati di incapsulare completamente il "plumbing" di trattare con Entity Framework, che richiede solo un'impostazione di configurazione, ad es. una stringa di connessione.
- Il primo approccio richiederebbe un DbContext configurato nelle impostazioni DI all'interno del progetto web / api e nella libreria del livello dati per restituire semplicemente le entità Db e quindi essere "mappato" sul livello web / api.
- Se i tuoi dati e modelli hanno diversi livelli complessi, la mappatura probabilmente riguarderà le proiezioni e cosa succederebbe se due diversi metodi di libreria volessero gestire le loro proiezioni in modo leggermente diverso?
Suppongo, per riassumere, dato l'approccio in cui sto contenendo il DbContext all'interno del progetto del livello dati e NON lo inietti, ha senso considerare l'alternativa - ad es. restituire solo entità Db e gestire la mappatura a livello di progetto web / api.