Nadchodzi król. Jedenastego listopada została wydana pierwsza beta ASP.NET 5.

O co chodzi?

Microsoft realizuje szalony pomysł. Zespół ASP.NET przepisuje frameworki MVC, Web API oraz Web Pages, a dokładniej łączy je w jedną całość. Mało tego, że przepisuje. Otwiera kod źródłowy i na bieżąco słucha głosu programistów. Możesz na bieżąco sprawdzać postęp w tworzeniu frameworka ASP.NET 5, testować nowe wersje i zgłaszać błędy (lub pomysły). Całość toczy się na GitHubie.

Moloch w kawałkach, czyli budowa ASP.NET 5

W zamierzchłych czasach ASP.NET był częścią .NET Framework. Jeżeli oczekiwałeś nowości - aktualizowałeś cały .NET. Jeżeli WinFormsy były łatane - aktualizowałeś cały .NET. Przypadkiem mogli przecież dołożyć zmiany w ASP.NET (konia z rzędem temu, kto czyta opisy poprawek). Wszystko było ciężkie i mało zwinne. Na szczęście sytuacja od dawna wygląda inaczej. ASP.NET MVC i jego pochodne są serwowane jako pakiety NuGet. Niestety, niektóre zależności w dalszym ciągu są częścią platoformy .NET. Cały stos ASP.NETa jest oparty o bibliotekę System.Web. Zawiera ona wszystko, czego mógłbyś(mogłabyś) użyć przy pisaniu aplikacji internetowej. Problem w tym, że nie użyjesz. Otrzymujesz ciężkie obiekty, które zapychają pamięć. ASP.NET 5 nie korzysta z System.Web! Nie będę tęsknił.

W ASP.NET 5 wszystko, z czego chcemy skorzystać musi zostać jawnie zadeklarowane.Najbardziej charakterystycznym przykładem jest włączenie serwowania statycznych plików (whaaat!?).

K-da fuq?

Nowy ASP.NET niesie ze sobą nowe narzędzia i środowiska uruchomieniowe. Pierwszym ich zbiorem jest Project K. Składa się z kilku elementów:

  • kre - (K Runtime Environment) - środowisko uruchomieniowe dla aplikacji ASP.NET 5, obsługuje proces budowania aplikacji,
  • kvm (K Version Manager) - program zarządzający wersjami kre (pierwsza rzecz do pobrania),
  • k - polecenie uruchamiające skonfigurowane skrypty (np. k web uruchamia aplikację w trybie self-hosted).

Interesujący jest fakt, że wersję KRE wybierasz dla projektu, nie dla wszystkich aplikacji na maszynie. Jeżeli piszesz swoją aplikację w Visual Studio i uruchamiasz na serwerze IIS, możesz nawet nie zauważyć różnicy. Co innego, gdy tworzysz program za pomocą vima (:q) na Arch Linux.

Wiele systemów, wiele środowisk programistycznych

Tak, nie pomyliłeś(-aś) się czytając nagłówek. ASP.NET 5 działa na Windowsie, Macu i GNU/Linux. W przypadku Windowsa możesz użyć serwera IIS lub uruchomić aplikację jako self-hosted. Na pozostałych systemach pozostaje Ci tylko druga opcja (za pomocą miniserwera Kestrel; możesz też poczekać na jakiś sensowny serwer/mod do nginxa).

Według mnie, istotniejsza jest możliwość wyboru IDE. Visual Studio jest prawdziwym kombajnem. Nadaje się całkiem nieźle, jeżeli całą aplikację robisz samodzielnie (albo każdy programista robi wszystko po trochu). Problem pojawia się, gdy jesteś front-end developerem i nie potrzebujesz budowania całej aplikacji w ciężkim środowisku, jakim jest VS. Chcesz tylko co jakiś czas pobrać kod z repozytorium i sprawdzić, czy koledzy z zespołu nie popsuli modelu danych, które odbierasz. W takiej sytuacji możesz korzystać z Sublime Text + Kulture.

Nowa struktura projektu

Pamiętasz bałagan w projektach ASP.NET MVC? JavaScript, CSS i obrazki rozrzucone po kilku miejscach? Od teraz wszystkie statyczne elementy statyczne będziesz wrzucał(-a) do katalogu wwwroot. Co prawda widoki są oddzielone od załączanej do nich treści, ale daje to dość dobry rezultat. Kolejną zmianą jest podział projektu na źródła (/src) i testy (/test). Prawdę mówiąc wolałbym sortowanie projektów wg typu, ale dzięki dodaniu nowego poziomu hierarchii możliwa jest praca w dowolnym środowisku.

Struktura projektu ASP.NET 5
Struktura projektu ASP.NET 5

Node.js w ASP.NET

ASP.NET 5 korzysta z narzędzi takich jak:

  • NPM (Node Package Manager) - zarządca pakietów napisanych w Node.js/JavaScripcie,
  • Bower - zarządca pakietów dla aplikacji internetowych,
  • Grunt - program automatyzujący zadania front-endowe.

W dużym skrócie: za pomocą Bowera ściągamy front-endowe zależności takie jak Angular.js, Knockout etc. etc. Za pomocą Grunta uruchamiamy zadania, np. kompilacja TypeScript -> JavaScript, LESS -> CSS. NPM służy do pobrania Bowera, Grunta i gotowych skryptów dla Grunta.

Dzięki użyciu Bowera, zależności front-endowe i back-endowe zostały rozdzielone. Na obrazku wyżej jest to wyraźnie widoczne: front-endowe zależności w Dependencies, back-endowe w References. Dla back-endu w dalszym ciągu używać będziesz NuGeta.

Nowa wersja czy nowy framework?

Patrząc na ogromną liczbę zmian możesz dojść do wniosku, że powstał zupełnie nowy framework. Na szczęście nie wszystko zostało porzucone. Idea modeli, widoków i kontrolerów pozostała taka sama. Możliwe jest więc przeportowanie starej aplikacji MVC 5 na ASP.NET 5. Oczywiście nie obejdzie się bez zmian w kodzie. W szczególności czekam na nowe podejście do procesu uwierzytelniania i autoryzacji użytkowników.

Kiedy pełna wersja?

Podczas dotnetConf 2014 Daniel Roth wspomniał o terminie wydania wersji RTM. Microsoft planuje wydanie na pierwszy kwartał 2015 roku. Daje to niewiele ponad 4 miesiące od teraz. Zobaczymy czy dadzą radę. Osobiście im kibicuję. Zaplanowałem nawet oparcie pracy magisterskiej o nowy framework ;-)

Posłowie
O kilku rzeczach nie wspomniałem.

Pierwsza sprawa - kod ASP.NET MVC był od dawna publiczny. Nie było jednak możliwości współpracy przy jego tworzeniu. Microsoft dał możliwość dołożenia własnych cegiełek do projektu za pomocą mechanizmu pull requestów i issue trackera. Nowością jest też rozwijanie oprogramowania w czasie bliskim rzeczywistemu - nowe zmiany pojawiają się niemalże każdego dnia.

Druga sprawa - mam nadzieję, że zespół ASP.NETa się opamięta i zmieni nazwę projektu K. Już wyobrażam sobie szukanie rozwiązań za pomocą Google, StackOverflow etc. Trzecia sprawa - nawet, jeśli jesteś front-end developerem, zastanów się nad pisaniem aplikacji w Visual Studio. BrowserLink + Web Essentials dają niesamowitego kopa. Wygląd aplikacji możesz tworzyć/poprawiać w przeglądarce za pomocą narzędzi developerskich.

Na koniec uwaga co do samej nazwy frameworka. W tej chwili Microsoft przeplata kilka nazw tego samego: ASP.NET 5, ASP.NET MVC 6, ASP.NET vNext. Wybrałem pierwsze ze względu na fakt, że zmianie nie ulega sam framework MVC. Zmienia się cały ekosystem.