2009-07-10 9 views
6

Sono arrivato al punto (involontariamente) che sento che in alcune parti sto facendo troppo nella vista (.aspx) stessa, troppa formattazione, concatenazione, in un posto un po 'regex sostituire.I modelli di vista in ASP.Net MVC dovrebbero essere tutte le stringhe?

Stavo iniziando a lavorare su una parte nuova e sto cercando di migliorare il mio approccio .. Poi mi ha colpito perché non faccio tutti i miei modelli di View (in/Models/in .Web) stringhe o un elenco di corda a una spinta. Nota: non mi riferisco al mio modello/dominio, ma piuttosto al mio ViewModel.

public class FinanceQuoteView 
{ 
    public string Provider; 
    public string Broker; // rather than Broker == null ? "N/A" : Broker.ToUpperCase(); 
    public string Monthly; // rather than Monthly.ToString("C") 
    public string PaymentTerm; // rather than "1+" + PaymentTerm.ToString(); 
    public string FreeInsurance; // rather than insuranceIncluded ? "Yes" : "No"; 
    public string[] Restrictions; 
} 

Per l'invio Form (editing aggiungendo) Io uso una vista del modello separato per alimentare l'azione di controllo (modello di modulo se si sarà in/Modelli/Form). Quindi FinanceQuoteForm contiene doppi ecc ... costruiti tramite un raccoglitore.

Cosa pensano tutti di questo approccio? Sta facendo il .ToString ("C") nella mappatura dal dominio al modello di visualizzazione troppo?

risposta

3

Il modello deve produrre i dati corretti, quindi spetta alla vista produrre i dati nel formato richiesto. Se hai costruito un'altra vista sulla parte superiore del modello, potresti voler eseguire diverse manipolazioni dei dati, quindi suggerisco di restituire come stringhe dal modello.

+0

Non sta parlando del modello di dominio: sta parlando del modello di visualizzazione. –

+0

Mark. Corretta. Non mi riferisco al mio modello. Mi riferisco specificamente al mio modello di vista che le azioni del mio controller generano (manualmente, automapper o qualsiasi altra cosa - piccoli dettagli impl) e inviano alla vista per il rendering. –

+1

Sono d'accordo su ck, il modello View è quello da "formattare" i dati. Passando SOLO stringhe, si perde la possibilità per il modello di visualizzazione di formattare i dati. Un semplice esempio che posso avere è che se si passa una "data" come stringa per visualizzare il modello, è necessario ulteriore manipolazione nel controller per servire il contenuto a un visitatore statunitense o un visitatore del Regno Unito. – xandy

1

Io tendo ad appoggiare piuttosto pesantemente verso le corde me stesso per i modelli di vista che disegno. Dopo tutto, la maggior parte dei dati visualizzati nella vista assume la forma di stringhe. Ogni volta che sto per eseguire la manipolazione dei dati nella vista (.aspx/.ascx), prendo seriamente in considerazione l'ipotesi di spingere tale logica verso il basso nel mio modello di vista, in modo da poterlo testare unitamente. Dopo tutto, Testability è il vantaggio maggiore che ottieni da MVC, quindi perché non usarlo?

In WPF (solo per fare una breve deviazione) molti dei controlli in modo nativo comprendono altri tipi di dati (come numeri, booleani e così via), ma su una piattaforma così intrinsecamente legata alle stringhe come HTML, rende ha molto senso per me trattare la maggior parte dell'output come testo.

Tutti i dati devono essere effettuati su round-trip tra server e browser codificati come stringhe, quindi, spesso, si dovrebbe essere espliciti al riguardo.

io sicuramente non credo che sia troppo - Ho solo che si può fare troppo poco :)

+1

"Ogni volta che sto per eseguire la manipolazione dei dati nella vista (.aspx/.ascx), prendo seriamente in considerazione l'ipotesi di spingere tale logica nel mio modello di vista in modo che possa testare l'unità". Puoi per favore elaborare su quella parte? Stavo andando a tracciare un viewmodel separato per il montaggio ma sono interessato al tuo approccio –

+2

Penso che stiamo parlando della stessa cosa, ma che forse mi sono espresso meno chiaramente. Con la manipolazione dei dati stavo semplicemente pensando a piccole cose come la formattazione di valute, la concatenazione di stringhe, ecc. Sapete: manipolare i dati nel suo percorso verso il flusso di output. Avere un modello di vista per la visualizzazione e un altro per la modifica dei suoni è molto ragionevole per me. Nel mondo senza stato di HTTP, uno viene emesso mentre l'altro è in input. Sono cose molto diverse e non dovrebbero essere confuse. Modellarli come diversi acquisisce questa distinzione molto chiaramente. –

0

vostra situazione cuciture di essere molto speciale e limitata in un modo: il ViewModel è o per la modifica o la visualizzazione . La maggior parte delle visualizzazioni fa entrambe le cose: hanno un sacco di materiale di visualizzazione e alcune cose di editing. Diciamo questa pagina:

Mostra domande, risposte e note. Modifica: risposta.

Non vorrei distinguere il 2. Si finirebbe con la duplicazione di molti campi di visualizzazione.

Preferirei avere una vista con possibilmente 2 proprietà: una per la visualizzazione e una per il valore della forma.

1

D'accordo, per lo più. Per i moduli di modifica tradizionali, preferisco avere modelli separati per il 'post model' (passato al controller) e per la vista/modifica 'view model' (passato alla vista).

Le proprietà del modello di post sono tutte stringhe. Questo mi permette di determinare se un campo è stato incluso nel post, altri no, questo è molto importante per la mia applicazione.

Il modello di post alimenta l'azione del mio controller che determina quali comandi eseguire, se ce ne sono.

Da qui, se l'azione del controller risulta nella visualizzazione della vista/modifica della pagina, quindi costruisco il modello di visualizzazione di conseguenza e lo fornisco alla vista.

Quindi, posso rendere le proprietà del mio modello di vista indipendentemente dai tipi desiderati. Non devono corrispondere ai tipi del modello del post.

Super pulito, e mi dà il pieno controllo su tutto.

Problemi correlati