Abbiamo un'applicazione MVC3 che abbiamo creato molte piccole azioni e visualizzazioni per gestire l'immissione dei dati ovunque sia necessario. Ad esempio, se si trattava di un blog e volevamo mostrare i commenti, abbiamo un'azione e una vista di commento e possiamo posizionarla ovunque desideriamo, una vista profilo utente e una vista blog post, ecc.Impedisci chiamate DB ripetute a causa dell'approccio orientato agli oggetti nell'app MVC3
Il problema è questo a causa di ogni piccola vista o azione, è necessario effettuare una chiamata, solitamente allo stesso servizio, più volte per caricamento di una pagina a causa di tutte le altre piccole visualizzazioni che abbiamo nella nostra applicazione. Quindi su una pagina molto grande che contiene queste piccole viste, potremmo avere 80+ chiamate sql con il 40% di esse duplicate e quindi la pagina rallenta. La soluzione attuale consiste nel memorizzare nella cache alcuni dati e passare alcuni dati nel ViewBag, se possiamo, se volete, come il profilo di un utente, controllare se la sua cache o il ViewBag se non lo richiede.
Questo sembra davvero molto sporco per un modello di progettazione e l'approccio viewbag sembra orribile dal momento che deve essere passato dall'alto verso il basso. Abbiamo aggiunto alcuni dati in HttpCurrent.Items per renderlo per una richiesta (invece di memorizzare nella cache dato che i dati possono essere modificati), ma ci deve essere una soluzione pulita che non si senta in errore e sia anche pulita?
EDIT
mi è stato chiesto di essere più specifico e, mentre questa è un'applicazione aziendale interna non posso dare via a gran parte delle specifiche.
Quindi, per mettere questo in un'analogia software. Paragoniamo questo a Facebook. Immagina che questa app MVC abbia un'azione per ogni post di Facebook, quindi sotto quell'azione ha un'altra azione per il pulsante Mi piace e il numero di commenti, quindi un'altra azione per mostrare i migliori commenti all'utente. Il modo in cui è progettata la nostra app otterrebbe il profilo degli utenti corrente in ogni azione (quindi come 4 volte al minimo nella situazione precedente) e quindi l'azione figlio otterrebbe il post parent parent per verificare di avere il permesso di vederlo. Ora puoi prendere in considerazione la memorizzazione nella cache delle chiamate per ogni controllo di sicurezza, bacheca, ecc, ma credo che il caching sia per le cose che saranno necessarie nel corso della vita dell'app, non solo piccoli pezzi qua e là per correggere un errore nel modo in cui il tuo l'applicazione è progettata.
Cosa si utilizza per l'accesso ai dati (ADO, NHibernate, EF)? – Phil
Josh, puoi essere un po 'più specifico su come funziona la tua soluzione. Stai usando i comandi 'Html.Action()'? In che modo esattamente i tuoi comandi sono duplicati? Puoi fornire un codice o uno pseudo-codice per dimostrare il problema? In questo momento, possiamo solo indovinare e fare ipotesi. A proposito, ciò che descrivi non ha nulla a che fare con un "approccio orientato agli oggetti". È più di un approccio refactored. –