Scegliere tra la vista e il controller per il mio codice

2

Sono consapevole che ci sono molti argomenti sul design di MVC, ma è difficile trovare buone spiegazioni: cosa dovrei fare, quali sono le conseguenze delle diverse possibilità ...

Quindi sto lavorando su un'applicazione ASP .NET MVC con un front-end HTML / Javascript. Attualmente esiste una vista che consente all'utente finale di modificare alcuni oggetti come gli altri utenti. Il modulo viene generato automaticamente sulla base di alcuni metadati. Ma questi oggetti sono piuttosto complessi, con molte proprietà di sistema e devono essere modificati da utenti non esperti. Poiché non vogliamo dedicare molto tempo alla visualizzazione, abbiamo deciso di nascondere tutti i campi di input tranne quelli più semplici come nome, cognome, telefono ...

La mia domanda è, questo filtro dovrebbe essere fatto nel controller o nella vista? Devo Ignorare i campi di input più complessi nella vista o restituire solo i campi necessari dal controller?

Anche il mio controller restituisce i dati dal modello senza alcuna elaborazione successiva. Quindi è fatto nella vista. Potrei farlo nel controller per salvare alcune chiamate Ajax e una piccola banda, ma non so se dovrei adattare il controller alla vista o la vista al controller.

    
posta Vincent 09.07.2014 - 21:16
fonte

1 risposta

2

EEK ... nooo amico mio, nascondere i controlli è l'ultima cosa che dovresti fare.

Se usi MVC e presumo (a giudicare dalla tua descrizione) la sintassi Model Binding, dove i tuoi moduli sono generati usando Razor e gli helper HTML, allora sei già a metà strada per lasciare che MVC faccia tutto il lavoro per te.

Ci sono 2 strategie principali quando si tratta di ASP.NET MVC.

Strategia numero 1: utilizza SOLO i modelli e le proprietà appiattiti che è necessario utilizzare.

In questo scenario, è necessario utilizzare un'architettura well, una soluzione applicativa a più livelli, con diversi livelli di operazioni molto separati per cose come presentazione, regole aziendali, dati e forse anche altri.

Nel tuo livello di presentazione, modelli gli oggetti per contenere SOLO le proprietà che devi visualizzare, tutto il resto come le proprietà di sistema per controllare le cose che fornisci usando le proprietà, le funzioni / metodi di proprietà e un'astrazione benché astratta di funzionalità in tutto il intero grafico dell'oggetto.

Il tuo livello aziendale, dovrebbe prendere oggetti completi contenenti tutto dal livello dati, quindi appiattirli o combinarli in oggetti semplici da gestire, che contengono solo le informazioni necessarie per svolgere il loro lavoro.

Fare le cose in questo modo, richiede un sacco di pianificazione in anticipo, molto in anticipo, e lascia poco o nessun spazio per il creep dell'oscilloscopio o le modifiche dell'ultimo minuto, e se usato completamente è più adatto ai progetti greenfield in cui hai il controllo totale dall'inizio.

Strategia numero 2: utilizzare le funzionalità di annotazione dei dati di ASP.NET

Il raccoglitore modello ASP.NET MVC fornisce un fantastico set di attributi per controllare ogni aspetto del tuo modello dati.

Puoi specificare cose come '[Required]', '[Min]', '[Datatype]' e molto altro.

Gli attributi sono applicati nella seguente fasion:

public myclass
{
  [Required]
  public string name { get; set; }
}

e sono esaminati e applicati da ogni livello del framework.

Nel caso del mio esempio precedente, se hai usato i generatori di form di rasoio, otterresti un modulo che specifica una casella di input per il nome, e se hai provato a inviare quel modulo senza nome fornito, il framework ti dirà nel codice del tuo controller che qualcosa non andava, permettendoti di passare il modello direttamente alla vista senza fare nulla.

Nella maggior parte dei casi, cambierà anche la formattazione e il CSS per mostrare che c'è un errore.

Però c'è di più.

Ci sono attributi, per indicare a un campo che si tratta di un input nascosto, di un input di sola lettura, il che significa che quando il modello viene renderizzato usando qualcosa come " @beginform " questi campi saranno automaticamente rimosso dal display per te, sempre senza dover scrivere una sola riga di codice, o modificare un tag html, una regola css o un attributo nella pagina di visualizzazione.

Se combini il 2 ...

Poi le cose vanno ancora meglio, i modelli pieni di grassi sono nel codice in cui conta e dove sono necessari, ei modelli leggeri contengono solo ciò che è necessario per la visualizzazione nella presentazione.

Puoi anche fare un ulteriore passo avanti e utilizzare qualcosa come Angular, Knockout o Backbone, puoi fare in modo che i tuoi controller restituiscano solo JSON, quindi puoi eseguire l'intera UI in modo MVVM.

In questo modo si alimentano i modelli di oggetti javascript che si comportano come il codice dietro la vista e i loro componenti dell'interfaccia utente si aggiornano automaticamente in base a questi modelli di visualizzazione.

La bellezza dell'utilizzo dell'approccio JSON è che puoi aggiungere tanti tipi diversi di UI alla soluzione che desideri.

Browser Web per desktop, app mobile per il telefono, app ibrida per tablet e semplici vecchie app desktop standalone per il personale sul retro che alimenta i dati nel sistema, il tutto operando su un set comune di endpoint JSON.

Ecco un paio di link che forniscono ulteriori informazioni su quali attributi dei dati sono disponibili e su cosa è possibile fare con loro.

MVC Tutorial parte 6 di Jon Galloway

Documentazione MSDN

L'intera serie di Jon Galloway è degna di essere letta, Jon è un autore di molti plurali e Iv'e ha avuto il piacere di rivedere parte del materiale che ha creato per loro, è di qualità eccezionale e molto informativo.

    
risposta data 09.07.2014 - 22:46
fonte

Leggi altre domande sui tag