Comparaison des frameworks web Clojure

Il existe quelques frameworks web pour Clojure

  • Compojure
  • Webjure
  • Conjurer
  • Moustache

et aussi des bibliothèques pour gérer certaines sous-tâches de développement Web, telles que

  • Enlive for templating
  • Le hoquet pour la modélisation
  • Anneau pour gérer les requêtes de niveau inférieur avec les demandes / réponses
  • ClojureQL pour la persistance (il ne semble pas très actif, cependant)

Il existe également des centaines de bibliothèques Java à utiliser. Certains aspects ont déjà été discutés ici et deux d’entre eux comparés un peu .

Je me demande comment ces frameworks / composants se comparent en termes de maturité, de scope, de facilité de développement, de sentiment de Django / RoR, etc.

Lorsque j’ai commencé avec le développement Web, c’était avec Clojure. Je n’avais aucune expérience préalable du développement Web. Je n’ai pas pu, pour la vie de moi, sortir Compojure. Je ne sais pas si la documentation du débutant a été améliorée depuis (ce n’était pas il y a si longtemps) ou pas, mais à l’époque, je ne pouvais pas le gérer. Un ami m’a montré Moustache et après avoir lu le README, j’ai pu rassembler ce qui est http://try-clojure.org dans son état actuel. Donc, en ce qui concerne la facilité d’utilisation, je pense que Moustache prend le gâteau pour moi.

Cependant, si cela existait à l’époque, je chanterais peut-être un air différent.

Conjure semble très cool, bien que très différent des autres frameworks. Compte tenu de mon expérience très limitée en matière de développement Web en général, je n’ai pas grand chose à dire à ce sujet, mais Conjure se sent mal à l’aise. Ça ne me semble pas juste . Il se peut que je ne sois pas habitué à la façon dont il fait les choses.

MISE À JOUR: Cela fait un moment que j’ai écrit cela. Beaucoup de choses ont changé. Peu de gens utilisent la moustache, et elle n’est pas vraiment activement maintenue, même si elle était suffisamment complète (et assez simple) pour que cela fonctionne probablement toujours, je vous recommande maintenant d’aller avec Compojure ou Noir à la place. Les deux sont actuellement des frameworks maintenus et les deux sont excellents dans leur travail.

MISE À JOUR 2: Noir est obsolète depuis longtemps et la plupart de ses fonctionnalités ont été déplacées vers une bibliothèque conçue pour être utilisée à partir de compojure / autres frameworks Web basés sur des anneaux appelés lib-noir .

Je sais que cette question est un peu datée … mais je ne pouvais pas m’empêcher de suggérer Noir comme une très bonne option.

Noir utilise une combinaison de Ring, Compojure et Hiccup pour faire le travail. Vérifiez-le!

Comme mentionné dans le commentaire de Bjorn Lindqvist ci – dessus , Noir est mort . Détails ici .

Au lieu de cela, envisagez d’utiliser Compojure et lib-noir .

Penser en termes de framework est probablement une erreur. La meilleure approche consiste à penser en termes de composants de bibliothèque que vous assemblez afin d’avoir le «cadre» le mieux adapté à vos besoins.

J’ai utilisé un certain nombre de frameworks dans le passé. La plupart d’entre eux font un assez bon travail pour vous permettre de démarrer rapidement avec une application de base. Cependant, sans exception, ils ont tous été frustrés le plus souvent. Souvent, cela est dû à un trop grand nombre de questions, ou simplement à traverser des obstacles qui ne sont pas pertinents pour l’application que vous développez.

Lors de ma première visite à Clojure, j’ai commencé à chercher des frameworks, mais je me suis rendu compte que c’était une mauvaise approche. Au lieu de cela, j’ai trouvé qu’il était préférable de commencer par une application de sonnerie de base et d’append des bibliothèques lorsque j’en avais besoin. Cela peut sembler être une courbe d’apprentissage plus importante au départ, mais en fait, cela s’avère tout aussi efficace car vous n’êtes pas obligé d’apprendre un tas d’échafaudages de framework dont vous n’avez souvent pas besoin.

Cependant, j’ai trouvé très utile d’examiner différents frameworks car cela me donne des idées sur la meilleure façon d’intégrer une bibliothèque et, plus important encore, sur l’OMI, comment structurer au mieux votre fichier lein project.clj en fonction du stream de travail souhaité.

J’ai trouvé les modèles suivants très utiles. Je ne les utilise pas «en l’état», mais j’ai adapté / volé des idées à plusieurs d’entre eux pour développer les frameworks les mieux adaptés à l’application sur laquelle je travaille.

  • Les modèles Luminus et Luminus fournissent un cadre très complet. Je les trouve un peu «lourds» pour de nombreuses applications, mais il existe d’excellents exemples sur la façon d’intégrer différentes bibliothèques Clojure dans votre application. Le site Web principal contient également des documents utiles.

  • Le projet de réactif , qui inclut un modèle de réactif, constitue un bon sharepoint départ pour une application utilisant le support ClojureScript de Reagent (react.js). J’ai trouvé que c’était l’une des bibliothèques ClojureScript les plus simples pour créer une application avec une bonne intégration Javascript.

  • lein-figwheel est un modèle très intéressant utilisant figwheel pour fournir un chargement dynamic de clojurescript afin que vous puissiez voir vos modifications de ClojureScript dans le navigateur lorsque vous modifiez votre code. De nombreux autres modèles ont maintenant ajouté cette fonctionnalité à leurs propres modèles. Développés à l’origine avec Om en tête, les modèles Luminus et Reagent intègrent désormais la fonctionnalité Figwheel dans leurs modèles. Montre vraiment certains des avantages de Clojure et de ClojureScript pour le développement interactif.

  • Compojure Template est un excellent sharepoint départ. Il met en place un projet très simple basé sur la compojure avec tous les éléments de base de l’anneau et de la compojure. Excellente façon de commencer avec le développement Web Clojure, car il est simple et vous permet de vous concentrer sur les bases avant de vous noyer sous toutes les autres options.

Il y a beaucoup d’autres modèles et frameworks, dont beaucoup n’ont pas encore eu le temps de regarder. Ces jours-ci, je commence souvent par un modèle de compojure ou un modèle de réactif, puis ajoute des bits supplémentaires si nécessaire. En général, j’inclus également selmar pour les modèles et utilise essentiellement la même configuration que Luminus.

La partie la plus importante pour obtenir un bon «framework» pour le développement Web est peut-être d’expérimenter et de comprendre le fonctionnement de lein et le fichier lein project.clj. Avoir un bon fichier project.clj déterminera votre stream de travail. Avoir les bons profils, la possibilité de lancer le fichier de différentes manières et charger différentes bibliothèques qui vous permettent de lancer figwheel ou un navigateur repl ou générer un fichier jar, c’est tout ce qui concerne votre fichier project.clj. Obtenez ce droit et votre environnement fournira juste le stream de travail dont vous avez besoin.

Un nouveau joueur est apparu dans la scène comme une bonne alternative à la mise en œuvre des services REST est libérateur . Il est plus facile d’exposer vos données en tant que ressources tout en respectant automatiquement toutes les exigences pertinentes de la spécification HTTP RFC-2616 et joue bien avec http-kit et Compojure.

Assez heureux avec http-kit btw, la fonctionnalité de rechargement de code en direct est pratique.

essayez le cadre routier pour le développement web rapide 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}))