Wprowadzenie

W tym artykule postaramy się znaleźć odpowiedź na pytanie czy .NET Core jest przełomową technologią. Jest z nami od pewnego czasu i wielu myśli dokładnie w taki sposób. Możemy również zaobserwować wzrost ofert pracy w których znajomość tej technologii jest uważana za kluczową. Czym jednak różni się ona od .NET Framework i co należy wiedzieć, aby z niej efektywnie korzystać? Postaram się przebliżyć główne różnice oraz pokażę w jaki sposób najefektywniej wykorzystać każdą z nich.

Technologia .NET Framework działa tylko na urządzeniach z systemem Windows. Istnieją takie projekty jak Xamarin oraz Mono, których głównym celem było wprowadzenie (ówczesnej) technologii .NET na urządzenia mobilne, oraz systemy operacyjne takie jak: MacOS oraz Linux. Z kolei .NET Core dostarcza standardową bibliotekę podstawową, która może działać na systemach takich jak:

  • Windows;
  • Linux;
  • MacOS;
  • oraz na urządzeniach przenośnych przy wykorzystaniu projektu Xamarin.

Architektura .NET składa się z czterech głównych komponentów:

  • CLS (Common language specification) definiuje sposób implementacji obiektów tak, aby działały wszędzie tam, gdzie działa platforma .NET. CLS jest podzbiorem CTS (Common Type System), który określa sposób opisywania wszystkich typów;
  • FCL (Framework class library) jest standardową biblioteką, która składa się z klas, interfejsów oraz typów wartościowych;
  • CLR (Common language runtime) jest maszyną wirtualną, która uruchamia framework i zarządza wykonywaniem programów .NET;
  • nie możemy również zapominać o samodzielnym środowisku jakim jest Visual Studio - pozwala na tworzenie wielu typów projektów do których zaliczamy m.in. aplikacje webowe, desktopowe czy usługi internetowe. Możemy również tworzyć projekty testów jednostkowych czy nawet projekty bazy danych SQL Server.

.NET Core vs .NET Framework

Microsoft obsługuje i wspiera oba środowiska uruchomieniowe – dzielą one również wiele wspólnych API. Jeżeli kiedyś spotkacie się z nazwą .NETStandard - są to właśnie współdzielone biblioteki. SharedAPI

Programiści używają .NET Framework do tworzenia aplikacji desktopowych (Windows) oraz aplikacji serwerowych. Nic również nie stoi na przeszkodzie w tworzeniu aplikacji ASP.NET. Z kolei w przypadku technologii ASP.NET Core istnieje możliwość tworzenia aplikacji serwerowych działających na systemach Windows, Linux oraz MacOS. W obu środowiskach uruchomieniowych możemy tworzyć aplikację w oparciu o VB.NET, C# oraz F#.

Kiedy używać .NET Core...?

Wieloplatformowy i oparty na otwartym kodzie źródłowym framework może być wykorzystywany do tworzenia aplikacji na dowolnej platformie. Często używany jest do tworzenia aplikacji w chmurze lub przerabianiu obecnych aplikacji biznesowych na architekturę mikoserwisów.

Najlepiej używać technologii .NET Core, gdy:

  • wymagana jest wieloplatformowość: nie jesteśmy ograniczeni do tworzenia aplikacji działających jedynie na platformie Windows - Linux oraz MacOS są również wspierane. Warto również mieć na uwadzę, że lista wpieranych systemów ciągle rośnie:
    • Visual Studio może być używane (w nieco ograniczonej wersji) na platformie MacOS. Więcej informacji znajdziecie tutaj: https://visualstudio.microsoft.com/vs/mac/
    • Visual Studio Code może być używany na każdej z trzech platform, tj. Windows, Linux oraz MacOS;
    • konsola linii poleceń może być używana na każdej platformie.
  • aplikacja będzie działa w oparciu o mikroserwisy: architektura ta jest zorientowana na usługi. Aplikacja składa się z szereg podprogramów (mikroserwisów) zaprojektowanych w celu realizacji określonej usługi biznesowej. Każda z tych usług może być wdrażana niezależnie i tworzona w różnych technologiach. .NET Core pozwala na połączenie technologii, jest lekki i może być podłączony do każdej mikrousługi. Jest również skalowany ponieważ pozwala na dodawanie kolejnych mikroserwisów. Jeżeli interesujacie się tym typem architektury zapraszam do szereg artykułów napisanych z perspektywy wykorzystania mikroserwisów. Mowa w nich o konteneryzacji, bazach danych NoSQL czy brokerach wiadomości pozwalających na komunikację pomiędzy serwisami:
  • wymagana jest skalowalność aplikacji przy wykorzystaniu konteneryzacji: kontenery i architektura mikoreserwisów są często ze sobą łączone. .NET Core posiada wbudowane wsparcie dla konteneryzacji: ASP.NET Core Docker Warto również mieć na uwadzę, żę .NET Framework może być również używany w kontenerach, ale zwiększy to rozmiar obrazu. Jeżeli chcecie dowiedzieć się więcej o optymalizacji tworzonych obrazów zapraszam do artykułu:
  • wymagana jest wysoka wydajność tworzonych systemów: najlepszą wydajność i możliwość skalowalności projektu uzyskujemy przy tworzeniu aplikacji w oparciu o ASP.NET Core. Wybór tej technologii zaowocuje możliwością tworzenia setek mikrousług. Ilość serwerów i maszyn wirtualnych będzie mogła być znaczenie zredukowana. Wydajność i skalowalność przełożą się na lepsze odczucia użytkowników odwiedzających nasz system – a wszystko to jesteśmy w stanie osiagnąć przy jednoczesnym cięciu kosztów związanych z zarządzeniem licznymi serwerami.
  • jeżeli chcesz kontroli z poziomu CLI (wiersz poleceń): spora cześć programistów preferuje lekkie edytory oraz możliwość pracy z wykorzystaniem linii poleceń. .NET Core pozwala na obsługę z poziomu linii poleceń na wszystkich obsługiwanych platformach.

Kiedy nie używać .NET Core...?

Jednym z problemów .NET Core jest brak wsparcia dla niektórych typów bibliotek w stosunku do .NET Framework. Warto mieć świadomość, kiedy nie będziemy mogli skorzystać z zalet tej technologii:

  • Windows Forms oraz WPF nie są wspierane. Jeżeli chcesz stowrzyć aplikację desktopową na system MacOS musisz posłużyć się zestawem narzędzi Mono;
  • ASP.NET Web Forms również nie występują w .NET Core. Sama technologia .NET Framework wciąż jest wspierana oraz aktualizowana (nieco wolniej z uwagi na .NET Core) dlatego jeżeli chcesz używać tej technologii nie musisz niczego się obawiać;
  • również usługi WCF zostały wycofane. Alternatywą jest REST API utworzone w technologii .NET Core. Ten typ projektu jest swojego rodzaju kontynuacją WCF - trzeba jednak mieć pełną świadomość zmiany niektórych konceptów. Wszelkie dodatkowe informacje możecie znaleźć pod adresem https://archive.codeplex.com/?p=wcf
  • brak wsparcia bibliotek firm trzecich: na ten problem możecie natrafić, kiedy wasz przestarzały projekt będziecie przerabiać na technologię .NET Core. Wyobraźcie sobie, że Wasz system pozwala na generowanie niezliczonej kombinacji przeróżnych raportów a korzystacie z zewnętrznego oprogramowania. Ostatnia aktualizacja pojawiła się ponad 2 lata temu i stajecie przed ogromnym wyzwaniem – skorzystać z nowego rozwiązania, które niesie za sobą utworzenie szkieletów wszystkich raportów od nowa czy może postawić usługę internetową na serwerze z systemem operacyjnym Windows i przenieść wszelką logikę biznesową odpowiedzialną z generowanie raportów do nowego projektu? Odpowiedź na takie pytanie nigdy nie jest łatwa...
  • potrzebujesz dostępu do specyficznych API dla systemu Windows. .NET Core został zaprojektowany jako framework wieloplatformowy – może działać na każdym wspieranym systemie. Operacje takie jak dostęp do rejestru czy WMI (zestaw protokołów pozwalających na dostęp i zarządzanie zasobami komputera takimi jak adaptery sieciowe, lista procesów, czujniki temperatury, etc.) nie są dostępne z poziomu tej technologii.
  • społeczność programistyczna i Microsoft pracują nas pełnym wsparciem języków VB.NET oraz F# - musisz mieć jednak świadomość, ze nie jest to wsparcie na poziomie 100%;

Często podkreślam, że technologia .NET Core jest stale rozwijana i oferuje coraz więcej. Znakomitym przykładem jest SignalR. Do wersji .NET Core 2.1 nie był wspierany. Warto śledzić blog poświęcony platformie, aby być na bieżąco z zapowiedzami dotyczącymi nowych funkcjonalności: https://devblogs.microsoft.com/dotnet/

Kiedy używać .NET Framework...?

.NET Framework jest ściśle powiązany z systemem Windows. W głównej mierze używany jest do tworzenia aplikacji desktopowych oraz dużych aplikacji biznesowych.

Poniżej postaram się podać argumenty przemawiające z użyciem tej technologii:

  • kiedy jest ona obecnie w użyciu: zamiast przeprowadzania migracji projektu na nową technologię można dokonać jego rozszerzenia. Programiści mogą napisać nowe usługi przy użyciu ASP.NET Core. (Dla wielu taka odpowiedź może być niesatysfakcjonująca – jest to jednak temat na jeden lub więcej kolejnych artykułów. Jest to możliwość do rozważenia dlatego została tutaj wspomniana.);
  • kiedy Twój projekt używa zewnętrznych bibliotek niewspieranych przez .NET Core: z pozoru wydaje się to błachostką – możesz powiedzieć: „Znajdę alternatywę". Niestety jeżeli w swojej karierze programisty spotkasz się ogromnymi systemami biznesowym zrozumiesz dlaczego tak napisałem. Wyobraź sobie sytem, który zaczął powstawać 10 lat temu (i wciąż jest rozwijany...), tworzony był przez wiele różnych zespołów programistycznych a pojęcie mikroserwisów nie było wówczas znane. Zaczynasz zagłębiać się w kod aplikacji ASP.NET znajdując referencje do biblioteki System.Windows.Forms, natrafiasz na zewnętrzne referencje (kluczowe dla Twojego projektu), które pozostają bez wsparcia od 4 lat. Na domiar złego korzystasz z kontrolek webowych, które wycofują w najnowszej wersji wsparcie dla Internet Explorer 8 (myślisz sobie, o co mu chodzi, prawda? Realia korporacyjne i klienci, dla których jest to kluczowa przeglądarka...) kosztem Microsoft Edge. Zamiast przejścia na najnowsze technologie musisz rozwiązać szereg innych, istotnych z perspektywy klinetów, problemów. Wracamy do pytania na której nie udziele odpowiedzi w tym artykule: Migracja na nowe technologie czy rozszerzenie funkcjonalności obecnego projektu i próba „łatania" pojawiających się problemów?
  • kiedy używasz technologii jeszcze niedostępnych w .NET Core:
    • ASP.NET Web Forms;
    • ASP.NET Web Pages;
    • usługi internetowe WCF;
    • Windows Workflow Foundation;
    • Workflow Services;
    • WCF Data Services (znane również pod nazwą ADO.NET Data Services);

Kiedy nie używać .NET Framework...?

Warto również wymienić kilka sytuacji w których nie warto kierować się wyborem technologii .NET Framework:

  • wymagane jest wsparcie różnych systemów operacyjnych;
  • wymaga jest wysoka wydajność i skalowalność nowo powstających projektów;
  • platforma .NET Core realizuje wszystkie nasze wymagania;
  • wymagana jest struktra otwartego oprogramowania.

Podsumowanie

Zamysł artykułu był niezwykle prosty – porównanie dwóch technologii. W trakcie analizy dochodzimy jednak do wniosku, że każda z technologii ma swoje plusy i minusy, ograniczenia i zalety oraz odmienną charakterystkę. Najlepszym podsumowaniem będzie sięgnięcie po informacje do źródła, firmy Microsoft: .NET Framework vs .NET Core

.NET Framework jest dojrzałą platformą dystrubuowaną z systemem Windows. Używaj tej technologii, gdy chcesz tworzyć aplikacje desktopowe i UWP lub jeżeli nie masz nic przeciwko pracy ze starszą technologią ASP.NET.

.NET Core jest technologią wieloplatformową działającą na systemach Windows, Linux oraz MacOS. Używaj tej technologii jeżeli chesz tworzyć aplikacje konsolowe lub internetowe, które będą działać na każdej z powyższych platform. Wysoka wydajność i skalowalność będzie osiągnięta przy wykorzystaniu konteneryzacji. Platforma ta jednak nie wspiera tworzenia aplikacji desktopowych oraz UWP.