Nasza strona używa cookies. Dowiedz się więcej o celu ich używania i zmianie ustawień w przeglądarce. Korzystając ze strony, wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki. Rozumiem

Pierwsze Kroki w Phoenixie Oczami Gościa od Railsów

  • 10.12.2016

Phoenix elixir

W programowaniu jesteśmy obecnie świadkami powrotu paradygmatu funkcjonalnego. Firmy usiłują sprawdzić, czy w niektórych częściach swojego oprogramowania mogą korzystać z języków, takich jak Haskell, Clojure lub Erlang i czy języki te spiszą się lepiej niż podejścia z wykorzystaniem języków obiektowych, takich jak Ruby.

W ostatnim czasie niektórzy członkowie społeczności Ruby przeszli na język zwany Elixir (i na Phoenix, jako ich framework webowy) stworzony przez José Valima - jednego z głównych autorów frameworku Rails. Pomyślałem sobie, że spróbuję przyswoić sobie nowy sposób myślenia związany z paradygmatem funkcjonalnym.

 

Odchodzimy od Ruby’ego

Phoenix nie korzysta z Ruby, tylko z Elixira. Elixir zaś oparty jest na BEAM - czyli wirtualnej maszynie Erlanga. Erlang powstał w latach 70tych w celu zautomatyzowania przełączników telekomunikacyjnych. Jako, że urządzenia te muszą pracować z milionami połączeń na raz, muszą również wykazywać wysoką odporność na uszkodzenia. Czy umiecie w ogóle wyobrazić sobie sytuację, w której nie będziecie mogli zadzwonić po karetkę tylko dlatego, że przełączniki będą w trakcie serwisu? Elixir może wykorzystywać wszystkie cudeńka Erlanga: sprawdzony w bojach mechanizm garbage collector, który działa dla każdego procesu niezależnie oraz opartą na modelu aktorów współbieżność wykorzystującą platformę OTP (Open Telecom Platform). Ciekawostką jest fakt, że bibliotekę współbieżności dla Javy i JVM - Akka stworzono, gdy twórca Akki nie był w stanie korzystać z Erlanga ze względu na wymagania klienta.

Przejdźmy zatem prosto do programowania i stwórzmy nową aplikację na bazie Phoenixa - frameworka webowego istniejącego w ekosystemie Elixira. Jednym z głównych elementów projektów tworzonych w Elixirze jest narzędzie mix. Jest ono odpowiednikiem do Bundlera w Ruby: kontroluje zależności między projektami. "Phoenix wykorzystuje również mixa do tworzenia zadań, więc jest też odpowiednikiem rake znanego z ekosystemu Ruby’ego". Do tworzenia nowych projektów w Phoenix można użyć generatorów podobnych do tych z Rails i wpisać do terminala:

mix phoenix.png

W ten sposób stworzymy wzór nowego projektu w Phoenix. Tuż po wykonaniu tego polecenia, Phoenix zapyta cię, czy chcesz zainstalować zależności za pomocą polecenia mix deps.get. Działa to wszystko podobnie, jak w Railsach. Spójrzmy zatem na strukturę projektu:

blo_post_app.png

Jak widzimy, różni się ona od tego, z czym mamy do czynienia w aplikacji Rails. Najważniejsze jest to, że cały kod aplikacji znajduje się w folderze app, a nie w folderze web. Widzimy tu również plik package.json. Do kompilowania i wiązania kodu odpowiedzialnego za interfejs użytkownika Phoenix używa narzędzia o nazwie brunch. Od ręki daje nam on również możliwość pisania kodu w ES6 - czyli najnowszej wersji JavaScript transpilowanej do wersji ES5 tak, aby była kompatybilna ze starszymi przeglądarkami, korzystając z kompilatora babel. Co więcej, Phoenix wykrywa każdą zmianę zapisaną w CSS lub JS, automatycznie odświeżając przeglądarkę, co jest niezwykle pomocnym narzędziem programistycznym. Przyjrzyjmy się więc nieco głębiej katalogowi web:

web_phoenix.png

Mimo że wygląda on podobnie do folderu app w Railsach, jest jednak inny. Podobnie jak w Django, wszystkie pliki HTML lądują w folderze templates. Folder views używany jest do przechowywania kodu widoków, co jest ogromnym usprawnieniem, ponieważ pozwala nam to oddzielić logikę widoku od logiki biznesowej naszej aplikacji. Kontrolery są tutaj bardzo podobne do tych wykorzystywanych w Railsach. Działanie modeli przypomina bardziej wzorzec Data Mapper niż ActiveRecord. Obszarem, w którym Phoenix naprawdę błyszczy, jest programowanie z wykorzystaniem channelo, gdzie wspiera on trwałe połączenie z klientem (np. poprzez technologię Web Socket). Procesy maszyny wirtualnej Erlanga są naprawdę niewielkie, w związku z czym możemy tworzyć ich wiele, co z kolei przekłada się na zawiązanie licznych, trwałych połączeń. To dlatego platformy komunikacyjne WhatsAppa i Facebooka zostały napisane właśnie w Erlangu.

Mam nadzieję, że mój post Wam się przyda. Zachęcam was do dzielenia się przemyśleniami i wpisywania ich w komentarzach pod postem.

Bartosz Łęcki- Ruby on Rails Developer, Netguru

Rekrutują