jakiego frameworka internetowego powinienem użyć w Clojure?

w tym przewodniku opisuję dostępne opcje frameworka internetowego dla Clojure i daję moje zalecenia.

Rzuć swój własny stos z polecanych bibliotek (wkrótce), jeśli dopiero się uczysz. Będzie to najlepszy sposób, aby zrozumieć, jak wszystko działa.

użyj postumentu, jeśli chcesz mieć przetestowany produkcyjnie fundament, na którym możesz zbudować swoją aplikację.

użyj Luminus, jeśli chcesz elastyczności toczenia własnego stosu bez angażowania pracy.

wprowadzenie

jednym z pytań, które często zadają mi początkujący w Clojure, jest ” jakiego frameworka internetowego powinienem użyć?”To dobre pytanie. W Pythonie jest Django. W PHP, Drupal. I oczywiście w Ruby jest król wszystkich frameworków internetowych, Ruby on Rails. Ale w Clojure trudno jest odpowiedzieć na to pytanie. Nawet decydowanie o tym, co jest frameworkiem, a co biblioteką, może być trudne. Najpierw musimy się tym zająć.

czym jest (a czym nie jest) framework internetowy

na potrzeby tego przewodnika zdefiniujemy framework internetowy jako zbiór kodu i zależności, które zapewniają holistyczne podejście do budowania aplikacji internetowej. Ta definicja wyklucza kilka bibliotek, które są powszechnie nazywane frameworkami, takimi jak Compojure i Ring, ponieważ same w sobie nie dają takiego podejścia. Jednak nadal istnieje kilka wielkich rywali, które uważam tutaj.

ponieważ walcowanie własnego stosu jest powszechną alternatywą w Clojure do używania wstępnie zbudowanego frameworka, i można to uznać za holistyczne podejście (mianowicie, Zbuduj swoją aplikację z istniejących bibliotek), uważam to również w zaleceniach.

kryteria rekomendacji

celem tego przewodnika jest przedstawienie mocnych rekomendacji dotyczących frameworków internetowych dla różnych potrzeb. Oto kryteria, które badam w odniesieniu do każdego frameworka:

dokumentacja

czy framework ma łatwą do naśladowania dokumentację? Szukam tutoriali dla początkujących poprzez zaawansowane tematy.

społeczność

duża, aktywna społeczność jest ważną częścią żywotności RAM. Duża społeczność może łatwiej dostarczać, aktualizować zależności i budować bardziej kompletne rozwiązanie.

dojrzałość

kolejnym ważnym czynnikiem jest wiek projektu i czas jego wykorzystania w produkcji na dużą skalę. Wolę starsze frameworki, które zostały wdrożone dla znaczących witryn.

standardy internetowe

oprócz trzech dużych języków internetowych (HTML, CSS i JavaScript), istnieją standardy dla samego protokołu HTTP i wiele „najlepszych praktyk”. Mówię o kodach odpowiedzi HTTP, negocjacjach treści, CORS, Websocketach itp. W jaki sposób ramy wykorzystują te standardy? Jak to je narusza?

podejście

ponieważ ramy muszą zapewniać podejście całościowe, należy wziąć pod uwagę samo podejście. Jak podejście framework do budowania aplikacji?

wdrażanie

gdy aplikacja jest gotowa, należy ją wdrożyć. Jakie opcje wdrożenia są dostępne? Szersza różnorodność jest lepsza.

Gorąco polecam

dziwnie mi to mówić, ale najlepszą opcją dla początkujących jest jeszcze zrolowanie własnego. Toczenie własnego stosu nie jest tak trudne, jak może się wydawać. Możesz zbudować funkcjonalny stos z kilku bibliotek. Dość często bardziej wytrzymałe, zbudowane dla Ciebie frameworki podjęły setki decyzji o tym, jak zbudować stos, ale nadal wymagają zrozumienia legionu bibliotek, które wybrali.

poza tym, że jest dobry do nauki, walcowanie własnego daje pełną kontrolę, aby wspierać lub nie wspierać danej funkcji.

największą wadą jest to, że musisz podejmować wiele decyzji za siebie. Istnieje wiele bibliotek, a wybór spośród nich może być trudną propozycją. Jedną pociechą jest to, że przy składaniu własnych bibliotek, przynajmniej w Clojure, stosunkowo łatwo jest zmienić biblioteki, jeśli okaże się, że jedna z nich nie działa dla Ciebie.

jeśli chcesz bardziej kompletnego rozwiązania (i będziesz), jeśli nadal będziesz go budować samodzielnie, dojdziesz do czegoś, co jest bardzo podobne do bardziej solidnych frameworków. Zalecałbym przejście na jedno z innych zalecanych rozwiązań, zamiast budować własny kompletny framework. Na szczęście przełączanie między nimi jest łatwe, ponieważ wszystkie działają na standardzie pierścienia.

Pedestal (GitHub)

Pedestal to dojrzały zestaw bibliotek, pierwotnie stworzony przez Cognitect, do tworzenia nowoczesnych, strumieniowych aplikacji internetowych. Jest on zbudowany wokół długotrwałych połączeń, które pozwalają na strumieniowe przesyłanie danych z serwera do Klienta w czasie. Aby wesprzeć tę funkcję, Pedestal wymyślił przechwytywacze, które umożliwiają definiowanie potoków asynchronicznych kroków, przez które przechodzi twoje żądanie.

polecam piedestał, ponieważ jest dojrzały, ma aktywną społeczność, obsługuje wiele różnych opcji wdrażania i ma dobre wsparcie dla aplikacji internetowych. Dwa uderzenia to dokumentacja i brak jednoczącego podejścia. Zawiera kilka przewodników, które przeprowadzą cię przez podstawowe Hello, World! zastosowania. Ale nie znalazłem niczego, co wyjaśniałoby, w jaki sposób należy złożyć kompletny wniosek. Podstawa podejścia ułatwia zapewnienie niskiego poziomu fundamentów, których potrzebujesz, jak cokół, na którym możesz stać nieco wyższy niż zaczynanie od zera. Aby mieć pewność, że fundamenty są ważne, ale wiele pozostaje deweloperowi do wyboru i budowania siebie. Na przykład celowo nie ma rozwiązania do tworzenia szablonów HTML. Nazywa to „API-first”. Spodziewałbym się, że kompletny framework internetowy będzie miał rozwiązanie do tworzenia HTML.

mimo tych problemów polecam cokół jako solidny i elastyczny fundament, na którym można budować aplikacje.

Luminus (GitHub)

Luminus jest zasadniczo projektem szablonu. Tworzysz nową aplikację internetową z tego szablonu i wszystko jest skonfigurowane dla Ciebie. Luminus daje Ci kilka opcji dla szablonu, ale ogólnie, jego podejście polega na dokonywaniu wyborów za Ciebie—czasami udostępniając własne biblioteki, a czasami korzystając z istniejących bibliotek. Po utworzeniu projektu będziesz mieć kompletny stos internetowy, na którym możesz budować lub modyfikować według własnego uznania. Główną zaletą jest ujednolicona wizja, która kierowała wyborami bibliotek.

Luminus ma na celu zapewnienie wszystkiego, czego potrzebujesz do pisania aplikacji internetowych. Dostajesz wszystko, od tras, przez zarządzanie sesjami, kompilację ClojureScript, po migracje baz danych. Wszystko jest wstępnie skonfigurowane, dzięki czemu można od razu rozpocząć pracę z logiką aplikacji. Pomyśl o Luminous jak o zestawie bibliotek i konfiguracji, które zbudowałbyś sam przez 10 lat pracy nad aplikacją. Na początku może nie być to potrzebne, ale w końcu będziesz chciał między innymi bezpieczeństwa, logowania, internacjonalizacji. Luminus daje Ci to jednym poleceniem.

główną wadą luminusa jest to, że wiele bibliotek jest bezpośrednio eksponowanych. Tak, to daje Ci możliwość konfigurowania ich tak, jak chcesz. Ale oznacza to również, że masz wiele do zrozumienia, jeśli chcesz budować na domyślnym zachowaniu. Na szczęście historia dokumentacji jest doskonała. Istnieje nawet książka, która dokumentuje zalecane podejście do budowy aplikacji internetowej za pomocą Luminusa.

ponadto istnieje od lat, został wdrożony dla dużych aplikacji i ma wiele opcji wdrażania.

Inne frameworki Uwaga

frameworki te są interesujące ze względu na ich innowacyjne podejście.

Fulcro (GitHub)

Fulcro jest rozwiązaniem typu fullstack. Używa Reacta na frontendzie, ale posiada kompletny model danych od klienta do bazy danych. Jeśli ten rodzaj jednoczącej wizji jest atrakcyjny, spróbuj. Istnieje doskonała dokumentacja i jest nadal aktywnie rozwijana.

Duct

Duct jest szablonem, który zbliża się do budowania aplikacji webowej jako zestawu konfiguracji. Na przykład w kanale routing jest konfiguracją. Migracja to konfiguracja. Korzystając z tego jednoczącego, zorientowanego na dane podejścia, tworzysz aplikację internetową, którą można deterministycznie załadować. Wydaje się, że ramy zaczynają działać.

Tadam

Tadam skonfigurował wiele istniejących bibliotek i stworzył standardową strukturę katalogów, aby pisanie prostych stron było bardzo łatwe. Jest wciąż nowy, ale aktywny.

Coast on Clojure (GitHub)

Coast on Clojure daje pełne rozwiązanie (baza danych do obsługi HTML), koncentrując się na utrzymaniu rzeczy prostych.

Hoplon (GitHub)

Hoplon jest rozwiązaniem typu fullstack o ciekawym podejściu. Część frontendowa kompiluje ClojureScript i umożliwia tworzenie interaktywnych komponentów, które używają modelu przepływu danych podobnego do arkusza kalkulacyjnego. Może łączyć się z backendem, wywołując funkcje, które są proxy funkcji na serwerze. Pozwala to ominąć całą sytuację routingu. Rozwój na nim jest powolny.

niezalecane

te ramy nie są zalecane, ponieważ nie były aktywnie rozwijane zbyt długo i nigdy nie miały wystarczającej przyczepności. Nie oceniałem ich pod względem technicznym, ponieważ nie polecałbym ich na podstawie ich nieaktywnego rozwoju.

  • webnf
  • Clojure na cewkach
  • joodoo
  • Datsys

Nie frameworki

te projekty są często nazywane frameworkami, ale nie spełniają definicji „zapewnienia holistycznego podejścia do budowy aplikacji internetowej”. Nie oceniałem ich tutaj.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.