Supponiamo di avere un'applicazione Web ASP.NET MVC con i seguenti livelli:
- Logica aziendale
- Entità (dominio aziendale e database POCO)
- Comune (risorse, risorse)
- Accesso ai dati (query EF database, modelli EF EDMX e così via)
- Applicazione Web (applicazione Web MVC)
Utilizziamo l'approccio dei modelli di vista. Attualmente i modelli di vista sono posizionati nel livello Entità. Le query di accesso ai dati restituiscono i modelli di visualizzazione (a causa di problemi di efficienza, quindi evitiamo di utilizzare il mapper).
Il livello Web fa riferimento a tutti gli altri livelli. Riferimenti di accesso ai dati Livelli comuni e di entità. Riferimenti di logica aziendale Entità e livelli comuni, in futuro anche Livello di accesso ai dati.
C'è un'idea per spostare i modelli di visualizzazione sul livello Web. Perché? Perché sono infatti legati a una particolare tecnologia (MVC) e all'implementazione dell'interfaccia utente. Ma stiamo affrontando un problema qui, perché in questo scenario il livello di accesso ai dati deve fare riferimento ai riferimenti Web e Web. Accesso ai dati, quindi abbiamo un problema di dipendenza circolare.
Inoltre abbiamo uno scenario in cui alcune convalide del modello di vista richiedono un riferimento al livello di accesso ai dati. Manterremo il metodo di convalida all'interno dei modelli di visualizzazione. Attualmente vogliamo implementarlo iniettando la classe di contesto del database (che si trova nel livello di accesso ai dati) per visualizzare il modello per costruttore.
Hai idea di come possiamo evitarlo? È una buona idea mantenere i modelli di visualizzazione all'interno del nostro livello Web?