MVC Logic, Vista e Helpers - una storia specifica
-
29-09-2019 - |
Domanda
Io e un collega stanno discutendo come vorremmo generare un link in una pagina. Dovremmo usare html aiutanti o mantenere la logica vista molto semplice nella vista?
Per questo progetto stiamo usando Castello di monorotaia e il motore di visualizzazione NVelocity. Sarei grato a chiunque considera entrambe le opzioni qui sotto e dà loro opinioni.
In questa storia, il collegamento è attualmente utilizzato solo su una singola pagina.
Opzione 1 - Con Helper
Codice Helper
var action = snail.IsActive ? "ConfirmDeactivate" : "ConfirmActivate";
var routeValues = new Dictionary<string, string>
{
{"action", action},
{"querystring", "id=" + snail.ID}
};
var href = UrlHelper.For(routeValues);
var link = new XElement("a");
link.SetAttributeValue("href", href);
link.SetValue(action.Substring(7));
return link.ToString();
E poi nella vista, ci basta chiamare l'helper in questo modo:
<li>$Html.SnailActivationSwitchLink($item)</li>
Opzione 2 - All in the View
#if($snail.IsActive)
<a href="$Url.For("%{action='ConfirmDeactivate', querystring='id=$snail.ID'}")">Deactivate</a>
#else
<a href="$Url.For("%{action='ConfirmActivate', querystring='id=$snail.ID'}")">Activate</a>
#end
Soluzione
Per quanto mi riguarda preferisco l'opzione 1. È più conveniente fare la logica sulla aiutante e più elegante.
Altri suggerimenti
io vivamente / uso Opzione 1 - a prescindere dal numero di visualizzazioni che si sta sviluppando
- Fai la tua vista Dumb. -. Non importa di una singola vista o di 100 visualizzazioni
Un sacco di supporto per l'opzione 1, quindi -! Tempo per l'avvocato del diavolo gioco
Una delle principali ragioni per l'applicazione concetti come DRY è quello di rendere l'applicazione più facile da cambiare / più gestibile. Quindi:
-
Che cosa succede se il testo nel collegamento ha bisogno di cambiare più tardi? O voglio mettere un'immagine in là invece del testo? Voglio davvero di dover ricostruire l'applicazione per rimuovere un errore di battitura in un link?
-
Peggio ancora, che cosa succede se le esigenze di testo link per essere diversi in pagine diverse? Devo poi aggiungere un altro metodo di supporto per ogni pagina?
-
Questo supponendo che sia me che sta facendo il cambiamento. Che cosa succede se chiedo al mio markup guru cambiare il link ad un'immagine, o aggiungere una classe al un elemento di stile in su? Lui è perfettamente felice di modificare i file di visualizzazione, ma se avesse visto la chiamata aiutante avrebbe avuto alcuna idea di dove l'HTML è stato proviene e dove cambiarlo. Anche se ha trovato la classe helper avrebbe sapere come cambiare il codice C # per fare ciò che gli serve? Tutto quello che sta cercando di fare è di cambiare un po 'di testo! Perché deve essere così difficile?
-
ho potuto alleviare alcuni dei problemi di cui sopra con l'aggiunta di due parametri del metodo sulla aiutante, e passando il testo per ogni link, ma se il testo fosse un tag di immagine? Ora ho HTML che ho bisogno di scappare a mia chiamata helper - che sta andando a guardare piuttosto disordinato. Io ancora non poteva modificare gli attributi dell'elemento di collegamento o, dovrei aggiungere un parametro / parametri per questo pure? Dove si ferma?
In sostanza io sostengo che posso mostrare l'opzione 2 per la maggior parte delle persone e che capiranno e essere in grado di modificarlo. Nizza HTML pianura con alcuni facili da seguire la logica condizionale. Opzione 1 aggiunge complessità e abstration che non ho bisogno.