în acest ghid, descriu opțiunile disponibile pentru cadrul Web pentru Clojure și dau recomandările mele.
Roll propria stivă de biblioteci recomandate (în curând), dacă sunt doar de învățare. Acesta va fi cel mai bun mod de a înțelege cum funcționează totul.
utilizați piedestal dacă doriți o fundație testată în producție pe care să vă construiți aplicația.
utilizați Luminus dacă doriți flexibilitatea de a vă rula propriul stack fără munca implicată.
- Introducere
- ce este (și nu este) un cadru web
- criterii de recomandare
- documentație
- comunitate
- maturitate
- standarde Web
- abordare
- implementare
- foarte recomandat
- piedestal (GitHub)
- Luminus (GitHub)
- alte cadre de notă
- Fulcro (GitHub)
- Duct
- Tadam
- Coast on Clojure (GitHub)
- Hoplon (GitHub)
- nerecomandat
- nu cadre
Introducere
o întrebare care mi se pune foarte mult de către începători în Clojure este ” ce cadru web ar trebui să folosesc?”Aceasta este o întrebare bună. În Python, există Django. În PHP, Drupal. Și, desigur, în Ruby, există regele tuturor cadrelor web, Ruby on Rails. Dar în Clojure, aceasta este o întrebare dificil de răspuns. Chiar și a decide ce este un cadru și ce este o bibliotecă poate fi dificil. Va trebui să abordăm acest lucru mai întâi.
ce este (și nu este) un cadru web
în sensul acestui ghid, vom defini un cadru web ca o colecție de cod și dependențe care oferă o abordare holistică a construirii unei aplicații web. Această definiție exclude mai multe biblioteci care sunt denumite în mod obișnuit cadre, cum ar fi Compojure și Ring, deoarece acestea nu vă oferă, de la sine, o abordare. Cu toate acestea, există încă mai mulți concurenți mari pe care îi consider aici.
deoarece rularea propriului stack este o alternativă obișnuită în Clojure la utilizarea unui cadru pre-construit și poate fi considerată o abordare holistică (și anume, Construiți-vă aplicația din bibliotecile existente), consider că și în recomandări.
criterii de recomandare
scopul acestui ghid este de a oferi recomandări puternice pentru cadrele web pentru diferite nevoi. Iată criteriile pe care le examinez despre fiecare cadru:
documentație
cadrul are documentație ușor de urmărit? Caut tutoriale pentru începători prin subiecte avansate.
comunitate
o comunitate mare și activă este o parte importantă a viabilității unui cadru. O comunitate mare poate oferi mai ușor, menține dependențele actualizate și poate construi o soluție mai completă.
maturitate
vârsta unui proiect și cât timp a fost utilizat în producție în situri la scară largă este un alt factor important. Prefer cadre mai vechi care au fost implementate pentru site-uri semnificative.
standarde Web
pe lângă cele trei limbaje web mari (HTML, CSS și JavaScript), există standardele pentru protocolul HTTP în sine și o serie de „cele mai bune practici”. Vorbesc despre codurile de răspuns HTTP, negocierea conținutului, CORS, WebSockets etc. Cum utilizează cadrul aceste standarde? Cum le încalcă?
abordare
deoarece un cadru trebuie să ofere o abordare holistică, abordarea însăși trebuie luată în considerare. Cum abordează cadrul construirea unei aplicații?
implementare
când aplicația dvs. este gata, trebuie să fie implementată. Ce opțiuni de implementare sunt disponibile? O varietate mai largă este mai bună.
foarte recomandat
mi se pare ciudat să spun acest lucru, dar cea mai bună opțiune pentru începători este încă să vă rostogoliți. Rularea propriului stack nu este atât de dificilă pe cât pare. Puteți construi o stivă funcțională dintr-o mână de biblioteci. Destul de des, cadrele mai robuste, construite pentru tine, au luat sute de decizii pentru tine despre cum să construiești stiva, dar totuși necesită să înțelegi Legiunea bibliotecilor pe care le-au ales.
pe lângă faptul că este bun pentru învățare, rularea propriului dvs. vă oferă un control complet pentru a sprijini sau a nu sprijini o anumită caracteristică.
cel mai mare dezavantaj este că trebuie să iei o mulțime de decizii pentru tine. Există multe biblioteci acolo și alegerea dintre ele poate fi o propunere dificilă. O consolare este că, atunci când puneți propriile biblioteci împreună, cel puțin în Clojure, este relativ ușor să schimbați bibliotecile dacă descoperiți că una nu funcționează pentru dvs.
când vrei o soluție mai completă (și o vei face), dacă vei continua să o construiești singur, vei ajunge la ceva care seamănă foarte mult cu cadrele mai robuste. Aș recomanda trecerea la una dintre celelalte soluții recomandate, mai degrabă decât construirea propriului cadru complet. Din fericire, comutarea între ele este ușoară, deoarece toate funcționează pe standardul inelului.
piedestal (GitHub)
piedestal este un set Matur de biblioteci, creat inițial de Cognitect, pentru dezvoltarea de aplicații web moderne, de streaming. Este construit în jurul conexiunilor de lungă durată care vă permit să transmiteți date de la server către client în timp. Pentru a susține această caracteristică, piedestal a inventat ideea de interceptoare, care vă oferă o modalitate de a defini conductele de pași asincroni prin care trece cererea dvs.
recomand piedestal pentru că este matur, are o comunitate activă, acceptă o mare varietate de opțiuni de implementare și are un suport bun pentru aplicațiile web. Cele două lovituri împotriva sa sunt documentația și lipsa unei abordări unificatoare. Ea are unele ghiduri pe care le va primi prin Hello basic, lume! aplicații. Dar nu am găsit nimic care să explice cum ar trebui să fie pusă la punct o cerere completă. Piedestalul de abordare facilitează este de a oferi bazele de nivel scăzut de care veți avea nevoie, ca un piedestal pe care să stați puțin mai înalt decât să începeți de la zero. Pentru a fi sigur, că bazele este important, dar o mulțime este lăsat la dezvoltator pentru a alege și de a construi ei înșiși. De exemplu, în mod intenționat nu are o soluție de templare HTML. Se numește că „API-primul”. M-aș aștepta ca un cadru web complet să aibă o soluție pentru crearea HTML.
în ciuda acestor probleme, recomand piedestal ca o fundație solidă și flexibilă pe care să construiască aplicații.
Luminus (GitHub)
Luminus este în esență un proiect șablon. Creați o nouă aplicație web din acel șablon și totul este configurat pentru dvs. Luminus vă oferă câteva opțiuni pentru șablon, dar, în general, abordarea sa este de a face alegerile pentru dvs.—uneori oferind propriile biblioteci și uneori folosind bibliotecile existente. Când proiectul dvs. este creat, veți avea o stivă web completă care vă aparține pentru a construi sau modifica după cum doriți. Principalul avantaj este viziunea unificată care a ghidat alegerile bibliotecilor.
Luminus își propune să ofere tot ce aveți nevoie pentru a scrie aplicații web. Obțineți totul, de la rute, la gestionarea sesiunilor, la compilarea ClojureScript, la migrațiile bazelor de date. Totul vine preconfigurat, astfel încât să puteți începe imediat cu logica aplicației. Gândiți-vă la luminos ca setul de biblioteci și configurații pe care le-ați construi peste 10 ani de muncă pe o aplicație. S-ar putea să nu aveți nevoie de ea la început, dar în cele din urmă veți dori securitate, logare, internaționalizare, printre alte preocupări. Luminus îți dă asta cu o singură comandă.
principalul dezavantaj al Luminus este că multe dintre biblioteci sunt expuse direct. Da, asta vă oferă puterea de a le configura așa cum doriți. Dar înseamnă, de asemenea, că aveți multe de înțeles dacă doriți să vă bazați pe comportamentul implicit. Din fericire, povestea documentației este excelentă. Există chiar și o carte care documentează abordarea recomandată pentru construirea unei aplicații web folosind Luminus.
în plus, a fost în jur de ani de zile, a fost implementat pentru aplicații mari și are o varietate de opțiuni de implementare.
alte cadre de notă
aceste cadre sunt interesante pentru abordările lor inovatoare.
Fulcro (GitHub)
Fulcro este o soluție fullstack. Acesta utilizează React pe frontend, dar are un model complet de date de la client la baza de date. Dacă acest tip de viziune unificatoare este atrăgătoare, încercați. Există o documentație excelentă și este încă dezvoltată activ.
Duct
Duct este un șablon leiningen care abordează construirea unei aplicații web ca un set de configurații. De exemplu, în conductă, rutarea este o configurație. Migrația este o configurație. Folosind această abordare unificatoare, orientată spre date, construiți o aplicație web care poate fi reîncărcată deterministic. Cadrul pare să fie obtinerea de tracțiune.
Tadam
Tadam a configurat o serie de biblioteci existente și a creat o structură de directoare standard pentru a face scrierea site-urilor simple foarte ușoară. Este încă nou, dar activ.
Coast on Clojure (GitHub)
Coast on Clojure vă oferă o soluție completă (baza de date pentru a servi HTML), concentrându-vă în același timp pe păstrarea lucrurilor simple.
Hoplon (GitHub)
Hoplon este o soluție fullstack cu o abordare interesantă. Partea frontend compilează ClojureScript și vă permite să construiți componente interactive care utilizează un model de flux de date asemănător unei foi de calcul. Se poate conecta la backend apelând funcții care sunt proxy-uri ale funcțiilor de pe server. Acest lucru vă permite să ocoliți întreaga situație de rutare. Dezvoltarea pe ea este lentă.
nerecomandat
aceste cadre nu sunt recomandate deoarece nu au fost dezvoltate activ prea mult timp și nu au avut niciodată suficientă tracțiune. Nu le-am evaluat pe merite tehnice, deoarece nu le-aș recomanda doar pe baza dezvoltării lor inactive.
- webnf
- Clojure pe bobine
- joodoo
- Datsys
nu cadre
aceste proiecte sunt adesea numite cadre, dar nu îndeplinesc definiția „furnizării unei abordări holistice a construirii unei aplicații web”. Nu le-am evaluat aici.