Rails jest frameworkiem kompatybilnym z Rack, nastawionym na szybkie tworzenie aplikacji. Niestety, podejście "wszystko po wyjęciu z pudełka" i ślepe zachowanie Rails-way często powodują, że kod aplikacji traci na jakości, zarówno pod względem odbioru (czytelności), jak i działania.
Popularne problemy związane z Railsami i Rails-way
- routing,
- before-actions,
- duże akcje w kontrolerach,
- prywatnych metod w kontrolerach,
- mixiny użyte raz,
- logika w widokach,
- Wywołania zwrotne ActiveRecord,
- Stowarzyszenia,
- "grube modelki".
Dodatkowe problemy
- Aktywne walidacje rekordów,
- implicite nad explicit,
- nadużywanie DRY,
- delegacje do stowarzyszeń,
- wywołań serwisowych w modelach.
Alternatywy dla Rails
Jeśli chodzi o Szyny w Ruby mamy kilka alternatyw. Inne frameworki oparte na Rack obejmują: - Sinatra, – Roda, – Hanami.
Co czyni je wyjątkowymi?
Zarówno Sinatra, jak i Roda oferują nam składnię routingu blokowego, ale routing w Sinatrze jest listą, a w Rodzie - drzewem. W obu frameworkach musimy sami zająć się implementacją warstwy modelu. W przypadku Rody dobrym pomysłem jest skorzystanie z gema Sequel.
Roda jest inspirowana Sinatrą. Sama w sobie jest bardzo lekka, ale ma wiele wtyczek.
Hanami jest najbliżej Szyny jeśli chodzi o obszary objęte ramami. Najważniejsze różnice w zakresie użytkowania są następujące:
- kontrolery w Szyny vs. działania w Hanami,
- dedykowane klasy / obiekty obsługujące konkretne żądanie HTTP, a nie jeden kontroler do działań związanych z konkretnym zasobem (modelem),
- warstwa modelu oparta na repozytoriach i encjach, oddzielająca trwałość od reszty aplikacji, a nie wzorzec aktywnego rekordu.
Hanami w wersji 1 mocno ogranicza użycie ROMu, na którym bazuje (wersja 3, a jest już 5), więc nie warto korzystać z proponowanej tam warstwy modelu. Ponieważ jednak jest to bardzo otwarty framework, dość łatwo zaimplementować tam własny model.
Dodatki dla Rails
Warto korzystać z rozwiązań, które nie są zależne od Szyny i są bliższe "czystym" Ruby. Narzędzia wymienione w prezentacji to:
- Sequel (ORM, alternatywa dla ActiveRecord),
- ROM (mapowanie obiektów),
- biblioteki dry-rb: dry-validations, dry-system i dry-monads.
Sequel jest łatwy do umieszczenia w projektopiera się na wtyczkach, a także implementuje wzorzec aktywnego rekordu. Ma lepszą niskopoziomową obsługę zapytań niż Szyny' ActiveRecord.
ROM używa Sequel, ale jego koncepcja polega na tłumaczeniu między rekordami w bazie danych a rekordami w bazie danych. Ruby obiektów. Ma na celu szybkość i transformację danych. Wyraźnie oddziela warstwę trwałości w aplikacji.
Biblioteki dry-rb są bardzo przydatnymi narzędziami:
- Walidacja sucha jest bardzo łatwa w użyciu w projektach API i pozwala na dużą kontrolę nad poprawnością przychodzących danych,
- dry-system wymaga nieco praktyki i cierpliwości, aby programiści ją zrozumieli, ale pozwala na bardzo elastyczne zarządzanie zależnościami w aplikacji i ładowanie komponentów projektu w izolacji; jeśli chcemy użyć tej biblioteki w Szynymożemy użyć suchych szyn,
- suche-monady to trudna koncepcja w teorii, ale w praktyce jest łatwiejsza do zrozumienia, monady wynikowe mogą być świetnym sposobem na zwiększenie czytelności kod rozważając konkretne przypadki zamiast rozgałęzień if.
Wnioski
Najlepiej używać Szyny aby nie trzeba było używać Szyny jednego dnia.
Źródła
Artykuły
Ramy
Klejnoty
Specyfikacje
Czytaj więcej:
Czym jest Ruby on Jets i jak zbudować aplikację przy jego użyciu?
Vuelendar. Nowy projekt Codest oparty na Vue.js
Cotygodniowy raport Codest z najlepszymi artykułami technicznymi. Tworzenie oprogramowania dla 50 milionów współbieżnych gniazd (10)