2010-07-24 13 views
64

Istnieje kilka ram sieci dla ClojurePorównanie Clojure internecie Ramki

a także kilka bibliotek do czynienia z pewnym internecie podzadania programistyczne, takie jak

  • Enlive dla szablonów
  • Hiccup dla szablonów
  • Ring obsłużyć niższe rzeczy poziomu wniosków/odpowiedzi
  • ClojureQL do utrwalania (nie wydaje się bardzo aktywne, chociaż)

Dostępne są również setki bibliotek Java. Niektóre aspekty zostały już omówione: here i two of them compared a bit.

Zastanawiam się w jaki sposób te ramy/komponenty porównać pod względem dojrzałości, zakres, łatwość rozwoju, Django/RoR uczucie itp

+0

Nie zapomnij dodać Clojure na Cewki na https://github.com/zubairq/coils a także Pedestal – Zubair

+3

Gdzie to stanowisko dzisiaj, zbliża się koniec 2013? – scape

Odpowiedz

39

Kiedy zaczynałem z tworzenia stron WWW, to było z Clojure. Miałem no wcześniejsze doświadczenie z tworzeniem stron internetowych w ogóle. Nie mogłem, na moje życie, wykreślić Compojure. Nie wiem, czy od tego czasu udoskonalono dokumentację dla początkujących (nie było to dawno temu), czy też nie, ale wtedy nie mogłem sobie z tym poradzić. Znajomy wskazał mi Moustache i po przeczytaniu README udało mi się zebrać to, co jest http://try-clojure.org w jego aktualnym stanie. Więc jeśli chodzi o łatwość użycia, myślę, że Moustache bierze dla mnie tort.

Jeśli jednak w danym momencie istniała this, mógłbym śpiewać inną melodię.

Conjure wygląda bardzo fajnie, ale bardzo inny z innych frameworków. Biorąc pod uwagę moje bardzo ograniczone doświadczenie związane z tworzeniem stron internetowych w ogóle, nie mam wiele do powiedzenia w tej sprawie, ale Conjure wydaje mi się niezwyciężony. Po prostu nie czuje się tak dobrze, jak . Może po prostu nie jestem przyzwyczajony do tego, jak to robi.

AKTUALIZACJA: Minęło trochę czasu, odkąd to napisałem. Wiele rzeczy się zmieniło. Niewiele osób używa już wąsów i nie jest aktywnie konserwowane, chociaż było wystarczająco kompletne (i dość proste), że prawdopodobnie nadal działa, teraz polecam zamiast tego używać Compojure lub Noir. Oba z nich są obecnie utrzymane w ramach i oba są doskonałe w swojej pracy.

AKTUALIZACJA 2: Noir został przestarzały przez dłuższy czas, a większość jego funkcjonalności została przeniesiona do biblioteki zaprojektowanej do użycia z kompilacji/innych pierścieniowych frameworków internetowych o nazwie lib-noir.

+0

dzięki za dodanie do listy frameworków, Mustache jest dla mnie nowy –

+0

@ [Adam Schmideg] Prawdopodobnie jest ich jeszcze więcej! To wszystko, o czym teraz myślę. Z pewnością są najbardziej popularne. :) – Rayne

+2

Jeśli chodzi o aktualizację, wąsy są żywe i mają się dobrze. Nie wymagało to żadnej konserwacji i byłem jej szczęśliwym użytkownikiem podczas wszystkich zmian w rdzeniu Clojure. Christophe Grand pracuje obecnie nad wydaniem nowej wersji o bogatszej składni i więcej funkcji. –

20

Wiem, że to pytanie jest nieco przestarzałe ... ale nie mogłem pomóc, sugerując Noir jako bardzo fajną opcję.

Noir używa kombinacji Ring, Compojure i Hiccup, aby wykonać zadanie. Sprawdź to!

+11

Noir jest przestarzałe, zobacz: http://blog.raynes.me/blog/2012/12/13/moving-away-from-noir/. Autor zaleca zamiast tego użycie narzędzia Compojure. –

2

Nowy zawodnik pojawił się na scenie, jako dobrą alternatywą do wdrożenia usług REST jest liberator. Ułatwia to udostępnianie danych jako zasobów, a jednocześnie automatycznie spełnia wszystkie odpowiednie wymagania specyfikacji HTTP RFC-2616 i ładnie odtwarza się z http-kit i Compojure.

Bardzo zadowolony z http-kit btw, funkcja przeładowania na żywo jest przydatna.

10

Myślenie w kategoriach ram jest prawdopodobnie błędem. Lepszym podejściem jest myślenie w kategoriach komponentów bibliotecznych, które zestawia się w celu stworzenia "ramy", która najlepiej odpowiada Twoim wymaganiom.

Korzystałem z wielu frameworków w przeszłości. Większość z nich wykonuje dość dobrą robotę dość szybko i szybko z podstawową aplikacją. Jednak bez wyjątku odkryłem, że wszystkie z nich są coraz bardziej frustrujące. Często jest to spowodowane zbyt dużą ilością pól lub po prostu przeskakiwaniem przez obręcze, które nie są istotne dla twojego zastosowania.

Kiedy po raz pierwszy przyjechałem do Clojure, zacząłem szukać ram, ale wtedy zdałem sobie sprawę, że to było niewłaściwe podejście. Zamiast tego, uznałem, że o wiele lepiej jest zacząć od podstawowej aplikacji pierścieniowej, a następnie dodać biblioteki, tak jak ich potrzebowałem. To może wydawać się większą krzywą uczenia się na początek, ale w rzeczywistości okazuje się być tak samo skuteczną, ponieważ nie jesteś zmuszony nauczyć się całego stosu rusztowania szkieletowego, którego często nie potrzebujesz.

Jednak odkryłem, że przeglądanie różnych frameworków jest naprawdę przydatne, ponieważ daje mi pomysły, jak najlepiej zintegrować bibliotekę i, co ważniejsze, IMO, w jaki sposób można najlepiej uporządkować plik LEAR project.clj, aby jak najlepiej odpowiadał przepływowi pracy, który chcesz .

Znalazłem następujące szablony naprawdę przydatne. Nie używam żadnego z nich „jak jest”, ale przystosowały/skradzionych pomysłów z wielu z nich do opracowania ram, które najlepiej pasują do aplikacji pracuję nad

  • Luminus i Luminus templates zapewnia bardzo rozbudowane ramy. Uważam je za trochę "ciężkie" dla wielu aplikacji, ale są przykłady świetnych sposobów na integrację różnych bibliotek Clojure z twoją aplikacją. Główna strona internetowa zawiera również przydatną dokumentację.

  • Reagent Project, który zawiera szablon odczynnika, stanowi dobry punkt wyjścia dla aplikacji z obsługą Reagent (react.js) ClojureScript. Odkryłem, że jest to jedna z najłatwiejszych bibliotek ClojureScript do tworzenia aplikacji z dobrą integracją JavaScript.

  • lein-figwheel to naprawdę interesujący szablon przy użyciu figwheel, który zapewnia dynamiczne ładowanie clojurescript, dzięki czemu można zobaczyć zmiany ClojureScript w przeglądarce podczas modyfikacji kodu. Wiele innych szablonów dodało teraz tę funkcję do swoich własnych szablonów. Pierwotnie opracowane z myślą o Om, szablony Luminus i Reagent teraz również integrują funkcjonalność Figwheel w swoich szablonach.Naprawdę pokazuje niektóre zalety Clojure i ClojureScript do interaktywnego programowania.

  • Compojure Template to świetny punkt wyjścia. Tworzy bardzo podstawowy projekt oparty na współdziałaniu z wszystkimi podstawowymi funkcjami ring i compojure. Świetny sposób na rozpoczęcie tworzenia stron internetowych Clojure, ponieważ jest prosty i pozwala skupić się na podstawach przed utopieniem pod wszystkimi innymi opcjami.

Istnieje wiele innych szablonów i frameworków, z których wiele jeszcze nie miałem czasu. Obecnie często zaczynam od szablonu szablonu lub odczynnika, a następnie dodawaj dodatkowe bity, jeśli jest to wymagane. Zwykle dołączam również selmar do szablonów i używam tej samej konfiguracji, co Luminus.

Być może najważniejszą częścią zdobycia dobrego "ramowego" dla ciebie tworzenia stron internetowych jest eksperymentowanie i zrozumienie, jak działa lein i plik project.clj lein. Posiadanie dobrego pliku project.clj określi twój przepływ pracy. Posiadanie odpowiednich profili, możliwość uruchomienia repliki na różne sposoby i załadowania różnych bibliotek, które pozwalają na rozpoczęcie pracy z rysunkiem lub przeglądarką, replikowanie lub generowanie słoja itp., Dotyczy tylko pliku project.clj. Zrób to dobrze, a Twoje środowisko zapewni tylko to, czego potrzebujesz.

2

spróbować ramy drogową szybko internetowej 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}))