Articoli con tag ASP.NET MVC
Remove Magic strings with T4MVC [2]
Pubblicato da sierrodc in ASP.NET MVC il luglio 10, 2012
Il mio precedente post mostrava come, tramite l’utilizzo di T4 e del package nuget T4MVC, fosse possibile eliminare senza problemi di performance (nessuna valutazione di expression tree o altro) le stringhe utilizzate per definire link a viste, route, link a file statici ecc ecc…
Come avevo accennato, il problema del refactoring dei metodi è “quasi” risolto. Spiego il “quasi”:
Il problema principale è che i file cshtml non vengono compilati. Non essendo compilati, non è possibile valutare la presenza di possibili errori. E poichè il refactoring non funziona in questi file, la compilazione non produce errori.
Per caso mi sono imbattuto in un post (non ricordo, sorry) che spiegava come forzare la compilazione dei file cshtml: Editare csproj e impostare <MvcBuildViews>true</MvcBuildViews>. In questo modo, ad ogni build, le viste vengono compilate mostrandone i problemi nella Error List View.
Tutto perfetto se non fosse che abilitare la compilazione delle viste comporti tempi di compilazione (decisamente) più lunghi.
Il compromesso tra impostare MvcBuildView e avere tempi di compilazione decenti è spiegato qui: http://www.luisrocha.net/2011/10/avoiding-mvcbuildviews-build-time.html
In pratica è possibile, tramite External Tools, effettuare una compilazione delle views solo su richiesta dello sviluppatore.
Bye bye magic strings.
Remove Magic strings with T4MVC
Pubblicato da sierrodc in ASP.NET MVC il luglio 8, 2012
T4MVC è un progetto opensource sviluppato da @davidebbo ospitato su codeplex, precedentemente parte di MvcContrib, ora standalone.
Cosa pemette di fare? rimuovere, grazie ad un template T4, l’uso delle “stringhe” da un progetto MVC (riferimenti a controller, action, le area, i file statici …), il tutto con una curva di apprendimento minima (anzi, direi che non vi è curva di apprendimento e che i vari extension method di HtmlHelper sono più “complicati” da scrivere e da leggere).
Alcuni esempi di utilizzo:
- return RedirectToAction(“Index”);
returnMVC.People.Index(); - @Html.ActionLink(“Edit”, “Edit”, new { id=Model.Id })
@Html.ActionLink(“Edit”, MVC.People.Edit(Model.Id)) - @using (Html.BeginForm(“Create”, “People”))
@using(Html.BeginForm(MVC.People.Create())) - href=“@Url.Content(“~/Content/Site.css“)”
href=“@Links.Content.Site_css” - @Html.Partial(“_LogOnPartial”)
@Html.Partial(MVC.Shared.Views._LogOnPartial)
In package nuget contiene due template T4:
- T4MVC.tt: il template che si occupa di generare classi e metodi da utilizzare degli esempi sopra elencati. In particolare si occupa di creare
- classi T4MVC_*Name*Controller che ereditano *Name*Controller ed ne effettuano l’ovverride dei metodi. In questo modo il refactoring dei metodi è immediato (ovviamente una build è necessaria)
- Classi partial *Name*Controller che aggiungono alcune shortcuts direttamente ai nostri controller.
- Una classe statica MVC che raccoglie istanze statiche di classi T4MVC_*Name*Controller
- Classi statiche Scripts e Contents che raccolgono i link alle varie risorse statiche
- T4MVC.tt.settings.t4: raccoglie le convenzioni utilizzate dal precedente template, tra le quali:
- string HelpersPrefix=”MVC”: l’entry point per lo sviluppatore
- string ControllersFolder e ViewsRootFolder: i nomi delle cartelle dove risiedono i controller e le view
- string[] StaticFilesFolders: una lista di cartelle contenenti file statici dai quali T4MVC.tt genererà i riferimenti
T4MVC permette quindi di eliminare le stringhe, facilitare la scrittura e lettura di codice e rifattorizzare lo stesso (anche se alcuni problemi persistono, soprattutto nei cshtml). Buon coding.