T4MVC – sposób na stringi w aplikacji ASP.NET MVC

Dlaczego T4MVC?

W aplikacji ASP.NET MVC w wielu miejscach wykorzystujemy stringi do określenia takich rzeczy, jak: nazwa kontrolera, nazwa akcji, nazwa widoku, ścieżka do pliku i wiele innych. Osobiście nie lubię używania napisów w kodzie aplikacji. Trudno znaleźć później użycia danego napisu – przez to, gdy zmieniamy na przykład nazwę akcji, bardzo łatwo o pominięcie jakiegoś linku w aplikacji, a to z kolei powoduje, że psujemy jej działanie. Do tego dochodzą problemy z literówkami czy brak podpowiadania dostępnych opcji (tutaj na przykład Resharper to ułatwia i podpowiada).

Zamiast bezpośrednich napisów w swoich aplikacjach używam albo klas ze stałymi dla napisów wewnętrznych aplikacji, które są używane tylko w kodzie, albo zasobów (Resources) dla napisów, które są pokazywane użytkownikowi.

W przypadku ASP.NET MVC można samemu ręcznie tworzyć klasy ze stałymi dla nazw kontrolerów, akcji, widoków itp. Albo można skorzystać z czegoś gotowego. 🙂 Jako wielki fan szablonów T4 (mam nawet przygotowaną prezentację z tej tematyki) w swoich aplikacjach wykorzystuję już istniejący szablon, który generuje wszystko sam. Szablon można pobrać z Nugeta i nazywa się T4MVC (strona projektu).

Na githubie projektu znajduje się bogata dokumentacja pokazująca wszystkie dostępne z szablonu opcje. Ja natomiast w tym wpisie skupię się najbardziej istotnych elementach z szablonu, od których warto zacząć.

Instalacja oraz uruchamianie T4MVC

Instalacja T4MVC jest bardzo prosta. Wystarczy skorzystać z Nugeta i zainstalować pakiet T4MVC. Po instalacji pakietu, aby wygenerować wszystkie elementy, należy przejść do pliku T4MVC.tt w głównym katalogu projektu oraz go zapisać. Zapisanie pliku szablonu T4 powoduje jego wykonanie, czyli na ogół wygenerowanie kodu.

Niestety szablon nie wykonuje się automatycznie, dlatego po każdej zmianie w kodzie (np. po dodaniu nowego kontrolera, dodaniu akcji, zmianie czegoś w kodzie itp.) należy uruchomić szablon jeszcze raz. Możemy też skorzystać z jednego z dodatków do Visual Studio, które wykonują szablony przed buildem. Polecam jeden z dwóch:

  • AutoT4 – do uruchamiania wszystkich szablonów w solution
  • AutoT4MVC – dedykowany dodatek dla szablonu T4MVC, który uruchamia tylko ten szablon.

Darmowy kurs Visual Studio

Pracując z setkami programistów, zauważyłem, że większość osób nie pracuje efektywnie w Visual Studio. W skrajnych przypadkach korzystali z kopiowania z wykorzystaniem menu Edit. Wiem, że to dziwne, ale naprawdę niektórzy tak pracują. Dlatego postanowiłem stworzyć kurs Visual Studio – aby pomóc koleżankom i kolegom w efektywniejszej pracy.

Przygotowałem 30 lekcji e-mail, w których pokażę Ci, w jaki sposób pracować efektywniej i szybciej w Visual Studio. Poznasz dodatki, bez których nie wyobrażam sobie pracy w tym IDE.

Po więcej informacji zapraszam na dedykowaną stronę kursu: Darmowy Kurs Visual Studio.

Quiz C#

Ostatnio przygotowałem również quiz C#, w którym możesz sprawdzić swoją wiedzę. Podejmiesz wyzwanie?

Napisy dla nazw kontrolerów oraz akcji

W pierwszej kolejności warto wyeliminować napisy dla nazw kontrolerów oraz nazw akcji. Poniżej znajduje się przykład przekierowania w kontrolerze do jakieś innej akcji, w starej wersji oraz nowej, wykorzystującej klasy wygenerowane przez szablon T4MVC.

public virtual ActionResult Action(int id)
{
return Content(id.ToString());
}
public virtual ActionResult RedirectToActionUsingString()
{
return RedirectToAction("Action", "Home", new { id = 10 });
}
public virtual ActionResult RedirectToActionUsingT4MVC()
{
return RedirectToAction(MVC.Home.Action(10));
}
view raw HomeController.cs hosted with ❤ by GitHub

Jak widać powyżej, zamiast przekazywania nazwy kontrolera oraz nazwy akcji w formie stringów, możemy skorzystać z wygenerowanych klas. W tym przypadku korzystamy z klasy MVC, która ma pola dla wszystkich kontrolerów i później metody dla akcji. Dodatkowo możemy też w ładny sposób przekazywać parametry do nowej akcji.

Podobna sytuacja jest w widokach i generowaniu różnego rodzaju linków:

<ul class="nav navbar-nav">
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("About", MVC.Home.About())</li>
<li>@Html.ActionLink("Contact", MVC.Home.Contact())</li>
</ul>
view raw _Layout.cshtml hosted with ❤ by GitHub

Mamy bardzo podobną składnię, jak w przypadku kodu w kontrolerze, i możemy zrezygnować ze stringów.

Nową składnię możemy również wykorzystać w definicji routingu:

public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "IndexRoute",
url: "Index",
defaults: MVC.Home.Index()
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
view raw RouteConfig.cs hosted with ❤ by GitHub

Nazwy widoków

W aplikacji ASP.NET MVC czasami potrzebujemy w kodzie również nazw widoków, chociażby do wywołania widoków partial czy w sytuacji, gdy współdzielimy ten sam widok między różnymi akcjami – na przykład dla akcji dodania oraz edycji używamy tego samego widoku. W takich sytuacjach T4MVC również pozwoli nam wyeliminować użycie stringów w kodzie:

public virtual ActionResult UseViewNameAsString()
{
ViewBag.ActionName = "UseViewNameAsString";
return View("View");
}
public virtual ActionResult UseViewNameUsingT4MVC()
{
ViewBag.ActionName = ActionNames.UseViewNameUsingT4MVC; // MVC.Home.ActionNames.UseViewNameUsingT4MVC
return View(Views.View);
}
view raw HomeController2.cs hosted with ❤ by GitHub

Jak widać, możemy w prosty sposób wyciągnąć nazwę widoku stworzoną dla danego kontrolera czy nazwy wszystkich akcji.

Linki do plików

Kolejną fajną rzeczą, którą udostępnia T4MVC, to generowanie stałych dla różnego rodzaju plików w aplikacji, na przykład plików css, js, obrazków itp. Dzięki temu możemy wyeliminować kolejne napisy w plikach cshtml:

<div class="row">
<div class="col-md-12">
<img src="@Links.Content.Images.Visual_Studio_2013_Logo_svg_png" />
</div>
</div>
view raw Index.cshtml hosted with ❤ by GitHub

Podsumowanie

Jak widać powyżej, T4MVC znacznie ułatwia eliminację różnego rodzaju napisów w aplikacji ASP.NET MVC. Osobiście nie wyobrażam sobie projektu bez użycia tego szablonu. Pracując z różnymi zespołami, zauważyłem, że bardzo niewiele osób zna ten szablon (czy w ogóle szablony T4), a szkoda.

Gorąco zachęcam do zapoznania się z T4MVC i używania go w swoich projektach. Tradycyjnie na moim githubie jest projekt z demami.

A Ty używasz napisów w swoich aplikacjach? A może znasz już T4MVC lub używasz innego rozwiązania? Jeśli tak, podziel się tym w komentarzu!

3 thoughts on “T4MVC – sposób na stringi w aplikacji ASP.NET MVC

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *