Architettura MVC: come generare un modello di visualizzazione che viene visualizzato su ogni pagina

2

Ho creato un'applicazione greenfield. È a tre livelli (accesso ai dati, modelli di dominio, presentazione) con il livello di presentazione VMVC. Questa è l'applicazione più pulita che abbia mai costruito finora e tutto è andato benissimo nell'architettura.

Tuttavia, c'è una mosca nella mia zuppa aggravando il mio codice OCD ... Come faccio a gestire le informazioni di base che vengono trasmesse in ogni pagina? Ad esempio, il nome dell'utente attualmente connesso, i loro punti di reputazione e qualunque cosa si trovi negli appunti della sua applicazione. Vale a dire, come si ottiene il modello di vista "Top Bar" passato alla visualizzazione di layout comune (_Layout.cshtml)?

Ho l'oggetto utente modello dominio dell'utente corrente a cui fa riferimento l'oggetto AppContext, che ha funzionato bene per l'autorizzazione, ect. Ma dove lo trasformo in un modello di vista e lo porto alla vista del layout in modo MVC? Mettere quella roba in ogni singolo modello di visualizzazione sembra un po 'ridicolo. Avere generato AppContext, il modello di visualizzazione sembra ... davvero molto sporco.

Scusa se questa domanda è un po 'meschina, ma mi piacerebbe davvero vedere se la tua gente ha una soluzione elegante che mi è sfuggita; soprattutto quando l'applicazione si è riunita così bene finora.

Chiarificazione dell'architettura:

L'accesso ai dati (repository) fa riferimento al modello di dominio. La presentazione fa riferimento ai modelli di accesso ai dati e ai modelli di dominio. Il controller effettua una chiamata al repository che restituisce i modelli di dominio; questi modelli di dominio sono mappati a modelli di visualizzazione che vengono poi passati alle viste.

Sto seguendo l'unico modello di visualizzazione per visualizzare la regola.

    
posta TheCatWhisperer 21.03.2016 - 03:03
fonte

1 risposta

1

Sarei ancora interessato alla soluzione di qualcun altro, ma ecco cosa ho fatto:

public static class LayoutController
{
    public static LayoutModel Model
    {
        get
        {
            var model = new LayoutModel();
            var user = AppContext.User;
            model.Name = user.PrettyName;
            model.HasSystemAccess = user.HasAccessTo.TheSystem;
            return model;

        }
    }
}
    
risposta data 22.03.2016 - 13:14
fonte

Leggi altre domande sui tag