Minęły trzy miesiące od czasu, kiedy zdefiniowałem i upubliczniłem plany związane z kierunkiem rozwoju technologicznego, w którym podążam. Jak na razie nic się nie zmieniło. Z każdym kolejnym tygodniem umacniam się w przekonaniu, że jest to słuszna droga. W tym artykule podzielę się z Tobą garstką historii oraz obecnymi wydarzeniami, które związane są z czterema fundamentami, na których bazuje wszystko inne:

  • kursem Advanced Distributed System Design
  • frameworkiem NServiceBus
  • językiem C#
  • językiem F#

ADSD - Advanced Distributed System Design

Jest to kurs, wokół którego buduję, a dokładniej mówiąc, poszerzam swoją wiedzę na temat projektowania oraz realizacji systemów rozproszonych. Dlaczego poszerzam? W 2015 roku widziałem nagrany materiał. Wcześniej bazowałem na informacjach z bloga oraz publicznych nagrań twórcy kursu - Udi’ego Dahan’na. Kurs porządkuje całą wiedzę w jedną spójną całość, a także zawiera dodatkowe kluczowe elementy. Materiał jest bardzo obszerny i bardzo merytoryczny.

W obecnej sytuacji, w której się znaleźliśmy, mamy możliwość obejrzenia nagrań z całego kursu za tzw. free. Po zarejestrowaniu się na stronie dostajemy dostęp na określony limitowany czas. Więcej szczegółów znajdziesz w tym wpisie.

Zachęcam Cię do przejścia przez kurs. Znajdziesz tam dużo wartości. Jedno tylko małe ostrzeżenie. Po zapoznaniu się materiałem, świat IT nie wygląda już tak samo ;)

NServiceBus

Tak jak pewne uniwersalne elementy architektonicznie lub projektowe pozostają aktualne przez lata, tak schodząc na poziom konkretnych narzędzi, sytuacja zupełnie się odwraca. Języki, biblioteki, frameworki, technologie cały czas się zmieniają lub…przestają być rozwijane. Taka jest naturalna kolej rzeczy. Pamiętam, jak w 2014 roku uruchamialiśmy pierwszy podsystem zrealizowany z użyciem NServiceBus’a w wersji 4. Potem przyszła kolej na NServiceBus v5. Kolejne projekty, kolejne systemy, tym razem zrealizowane z użyciem NServiceBus v6. Wszystkie produkty, które powstały, miały jedną wspólną cechę - były realizowane w wykorzystaniem transportu MSMQ, który był pierwszym systemem kolejkowym, którego używał NServiceBus. Na chwilę obecną wygląda na to, że czas MSMQ dobiegł końca. W takiej sytuacji NServiceBus pokazuje swoją siłę, ponieważ jest on abstrakcją na różne systemy kolejkowe. Obecna wersja NServiceBus v7 współpracuje zarówno z rozwiązaniami On-premises, jak i z rozwiązaniami chmurowymi. Dzięki takim możliwością możemy w miarę bezbolesny sposób przesiąść się z jednego transportu na inny, bez konieczności radykalnej zmiany kodu wysyłającego oraz przetwarzającego wiadomości.

Jeśli chcesz szybko zapoznać się z możliwościami, jakie daje NServiceBus polecam Ci przejść przez tutorial ze strony Frameworka. Więcej informacji na temat całej Platformy Particular znajdziesz w tzw. Learning Path.

C#

Obecnie numer jeden, jeśli chodzi o język programowania na platformie .NET. Pierwotnie stworzony dla programowania w stylu Object-Oriented Programming. Od wersji 3.0 umożliwia również programowanie w stylu Functional Programming. Od wersji 4.0 dopuszcza programowanie z pominięciem statycznego typowania za pomocą słowa kluczowego dynamic. C# towarzyszy mi nieprzerwanie od momentu, kiedy napisałem w nim pierwszą linijkę kodu, aż do dziś. Dzięki językowi szlifowałem i nadal szlifuję programistyczne umiejętności. W parze z programowaniem rozwiązań zawsze idą elementy związane z ich projektowaniem. W moim przypadku, w początkowej fazie, były to elementy dookoła architektury 3-warstwowej z klasycznym podziałem na:

  • UI - User Interface Layer
  • BLL - Business Logic Layer
  • DAL - Data Access Layer

Po czasie doszła czwarta warstwa API co przekształciło się w projektowanie oraz programowanie w stylu architektonicznym RPC (Remote Procedure Call). Wynikiem tego powstały rozwiązania posiadające w warstwie BLL np. klasę ItemManager, która zawierała kilkadziesiąt metod związanych z logiką biznesową. Podobnie było na warstwie DAL np. ItemDatabaseMapper z wieloma operacjami dotyczącymi operacji na bazie danych. Takie podejście umożliwia współdzielenie kodu w łatwy sposób, co przekłada się na tworzenie zależności, co z kolei wiąże się z utrudnionym wprowadzaniem zmian. Z powodu architektury warstwowej nigdy nie miałem konieczność tworzenia modelu z prawdziwego zdarzenia, ponieważ potrzebne dane przerzucane były pomiędzy poszczególnymi warstwami w jakiejkolwiek, jak najprostszej postaci.

Plusem architektury warstwowej jest jej niska bariera wejścia. Daje możliwość łatwego nauczania języka C#. Pokazuje wartość z używania interfejsów jako zależności pomiędzy klasami znajdującymi się na każdej warstwie. Można na jej bazie uczyć Unit Testów, Mock’owania obiektów itp.

Natrafienie na materiały dookoła frameworka NServiceBus, a także zapoznanie się kursem ADSD mówiąc delikatnie, zburzyły mój pogląd na wytwarzanie oprogramowania, oczywiście na plus :) Z podejścia warstwowego przeszedłem na projektowanie oraz programowanie komponentowe. Koncepcja oraz implementacja Sagi pokazała mi, w jaki sposób powinien wyglądać i czym powinien charakteryzować się prawdziwy zorientowany obiektowo komponent:

  • odpowiedzialny za całą realizację konkretnego kawałka funkcjonalności
  • posiadający swój własny persystentny stan, do którego tylko on sam ma dostęp
  • komunikujący się z innymi komponentami w najbardziej jak to jest możliwe luźny sposób - messaging

C# umożliwia naukę programowania w podejściu zorientowanym obiektowo oraz w podejściu funkcyjnym. W pewnych zastosowaniach pozwala uprościć kod, poprzez zastosowanie typu dynamic. Na stronie dokumentacji znajdziesz wiele materiałów dotyczących różnych zagadnień związanych z językiem.

F#

Na koniec element, którym zajmuję sie dopiero od paru miesięcy. F#, język pozwalający w pełni wykorzystać możliwości programowania funkcyjnego, który zawiera również elementy związane z programowaniem obiektowym, ale uwaga, nie mylić z programowaniem zorientowanym obiektowo. Tak, jak w języku C# programując zorientowanie obiektowo, możemy wspomagać się konstrukcjami funkcyjnymi np. Lambda Expressions, tak w języku F# możemy programować funkcyjne, wspomagając się konstrukcjami obiektowymi np. Classes. Zagłębiając się coraz bardziej w świat języka F#, odnajduję w nim koncepcje, których nie widziałem w świecie języka C#, jak np. kompilowany SQL, typy Option, Record oraz Union, operator Pipe itd. W moim przypadku samo podejście funkcyjne jest bardziej naturalne niż podejście zorientowane obiektowo, dlatego chętniej zapoznaję się z kolejnymi konstrukcjami i elementami związanymi z językiem F#.

Jeśli chcesz zobaczyć w jaki sposób język F# współpracuje z frameworkiem NServiceBus oraz jakie motywy stały za podjęciem próby połączenia tych dwóch elementów zapraszam Cię do mojego praktycznego przewodnika.

Podsumowanie

ADSD, NServiceBus, C#, F#, to cztery fundamenty, na których można budować rozwiązania, zarówno te proste, jak i te bardziej złożone. Aktualnie sprawdzam i testuję różne techniki, które pozwalają wykorzystać właściwości wszystkich czterech elementów do tworzenia końcowych produktów. Wnioskami i przemyśleniami będę dzielił się na blogu. Tymczasem, udanego oglądania materiałów z kursu ADSD, a także nabywania oraz podnoszenia umiejętności w dziedzinach, którymi się interesujesz.

=