Dojrzałe frameworki internetowe Clojure? [zamknięte]

Jakie są aktualne wybory dojrzałych frameworków internetowych Clojure? Szukam jakiejś macierzy funkcji mówiącej mi, co obsługują popularne frameworki i w jakim stopniu, m.in.:

    Szablon odpowiedzi (odpowiedź napisana w Clojure lub w innym znaczniku - np. jak JSP z kafelkami)
  • sesje HTTP
  • REST z automatycznym mapowaniem adresów URL do funkcji action-functions i params
  • formularze HTML (paramy dostępne jako mapa, obsługa błędów, validation)
  • przepływ aplikacji (znany z frameworków Java - procedury obsługi żądań zwracają identyfikatory akcji, które są ostatecznie obsługiwane przez rendery)
Author: Konrad Garus, 2010-08-24

5 answers

Być może moja odpowiedź na Jaki jest dobry punkt wyjścia do rozwoju RESTful web service w Clojure? pytanie na SO może Ci pomóc. Wymienia kilka ważnych bibliotek internetowych dla Clojure (z linkami i krótkimi podsumowaniami). Kluczowy punkt, który chciałbym tutaj powtórzyć, znajduje się w pierwszym akapicie tej odpowiedzi:

Po pierwsze myślę, że mało prawdopodobne jest, aby znaleźć jedno rozwiązanie shrinkwrapped, aby zrobić to wszystko w Clojure (z wyjątkiem postaci biblioteki Java do wykorzystania przez interop). To, co staje się standardowym stosem internetowym Clojure, składa się z wielu bibliotek, które ludzie mieszają i dopasowują na różne sposoby (ponieważ szczęśliwie wydają się być idealnie kompatybilne).

Do tego dodam, że prawdopodobnie nie powinieneś oczekiwać obsługi rzeczy z rodzajem "przepływu aplikacji", który możesz znać z Javy (lub jeśli uważasz, że naprawdę tego potrzebujesz, prawdopodobnie będziesz musiał zwijać własną lib, aby ją obsługiwać!). To w porządku, ponieważ ludzie wydają się być bardzo zadowoleni z Ringa ' s handler-is-a-function, wyższego rzędu-middleware-friendly podejście.


Do adresowania swoich kul:

  • Szablon odpowiedzi:
    Istnieje wiele rozwiązań specyficznych dla Clojure, w tym Enlive i czkawka (Enlive jest bardzo potężnym silnikiem skrobania / szablonów / przekształcania HTML; czkawka jest DSL do pisania HTML w Clojure z właściwością nice, którą renderuje fast ). Jest to również prawdopodobnie jedno miejsce, w którym warto zejść do Javy i użyć czegoś w rodzaju, powiedzmy, StringTemplate . Ma to nawet dobrą stronę zniechęcania do mieszania szablonów i logiki! (Sądzę, że Stuart Halloway wspomniał, że jego firma wykorzystuje tę strategię w swojej pracy i odnosi z nią wielkie sukcesy.)

  • Sesje HTTP
    To byłby Sandbar, jak sądzę. Autor rozpoczął serię blogposts o tym, co wygląda bardzo obiecująco.

  • REST z automatycznym mapowaniem adresów URL do funkcji action-functions i params
    To jest Pierścień & Compojure i / lub Moustache . Patrz poniżej.

  • Formularze HTML (paramy dostępne jako mapa, obsługa błędów, Walidacja)
    Jak wyżej.

  • Przepływ aplikacji (znany z frameworków Java - obsługa żądań zwraca identyfikatory akcji, które są ostatecznie obsługiwane przez renderery)
    Jak wspomniano powyżej, nie jest to coś, co ludzie robią w Clojure.


Jako punkt wyjścia do nauki o stosie sieci Clojure, ten samouczek pierścienia autorstwa pierścienia jest bardzo pomocny. Autor Compojure James Reeves ma pewną dokumentację na temat Compojure. Być możemoja ostatnia odpowiedź na Jaki jest "wielki pomysł" za compojure routes? pytanie też może być pomocne. Źródła pierścienia zawierają również świetny dokument SPEC.

 33
Author: Michał Marczyk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:25

Ponieważ to pytanie zostało pierwotnie zadane / odpowiedzi, Noir web framework pojawił się jako obiecujące rozwiązanie.

Używa czkawki dla części szablonów, ale oferuje bardziej kompletny framework wokół tego.

Przykładowy kod podstawowy ze strony głównej Noir:

(ns my-app
  (:use noir.core)
  (:require [noir.server :as server]))

(defpage "/welcome" []
    "Welcome to Noir!")

(server/start 8080)
 14
Author: mikera,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-28 05:25:18

Polecę Ci użycie Luminus , nie ze względu na jego niesamowitą nazwę, ale także jego funkcję.

A ponieważ Noir nie jest już utrzymywany, nie polecam ci tego używać. Jest to również dobry wybór, aby zacząć od ring & Compojure od samego początku, aby zbudować własny framework.

 8
Author: crazy_phage,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-26 20:54:48

Możesz zadawać złe pytanie. To co widzę w twoim pytaniu to " jaki Framework Clojure jest najbardziej podobny do frameworków obiektowych Java, do których jestem przyzwyczajony?". Nie ma na to dobrej odpowiedzi; jeśli tylko czujesz się komfortowo z podejściem po stronie serwera (takim jak Grails lub gobelin), to może powinieneś tam zostać i znaleźć sposób na zaimplementowanie niektórych swoich backendów w Clojure.

Z drugiej strony, jeśli chcesz zbudować coś bardziej wiernego Clojure, możesz chcieć Znajdź swój własny mix. Miałem kilka dobrych sukcesów przy użyciu AngularJS i CoffeeScript na kliencie, i Clojure (za pomocą pierścienia i Bishop) na serwerze (choć przenosimy się z Bishop do Liberator). W każdym razie, gdy przyjmiesz podejście do aplikacji internetowej "single page" i zaczniesz traktować stronę serwera jako źródło i pochłanianie danych, Clojure będzie działać wyjątkowo dobrze.

 1
Author: Howard M. Lewis Ship,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-03 22:21:20

Wypróbuj Framework drogowy dla szybkiego Web dev https://github.com/zhujinxian/road

(defn render-test [ret tmt]
  (-> (resp/response "------render----test------") 
    (#(resp/content-type %1 "text/plain"))))

(defn foo
  "I don't do a whole lot."
  [x]
  (str "来自源码目录的参数:" x))

(defn handler [^Integer x]
    {:$r render-test :text (str "hello world, road goes sucess!" (foo x))})

(defn home [req content ^Integer num]
    {:hiccup "home.clj" :content (str "home" content) :num num})

(defroad road (GET "/web-test-0.1.0-SNAPSHOT-standalone/main" handler) 
              (GET "/web-test-0.1.0-SNAPSHOT-standalone/home/:num{\\d+}" home))

(defn -main [& args]
  (log/info "---------log4j test-------")
  (jetty/run-jetty road {:port 3000}))
 1
Author: ainixian2004,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-08 03:57:27