i denne vejledning beskriver jeg de tilgængelige internetrammemuligheder for Clojure og giver mine anbefalinger.
rul din egen stak fra anbefalede biblioteker (kommer snart), hvis du bare lærer. Det vil være den bedste måde at forstå, hvordan alt fungerer.
brug piedestal, hvis du vil have et produktionstestet fundament, som du kan bygge din applikation på.
brug Luminus, hvis du vil have fleksibiliteten ved at rulle din egen stak uden det involverede arbejde.
- introduktion
- hvad er (og ikke er) en internetramme
- Anbefalingskriterier
- dokumentation
- fællesskab
- modenhed
- internetstandarder
- tilgang
- Deployment
- stærkt anbefalet
- piedestal (GitHub)
- Luminus (GitHub)
- andre rammer af note
- Fulcro (GitHub)
- kanal
- Tadam
- Coast on Clojure (GitHub)
- Hoplon (GitHub)
- anbefales ikke
- ikke rammer
introduktion
et spørgsmål, som jeg bliver stillet meget af begyndere i Clojure, er “hvilken netramme skal jeg bruge?”Dette er et godt spørgsmål. I Python er der Django. I PHP, Drupal. Og selvfølgelig i Ruby er der Kongen af alle netrammer, Ruby on Rails. Men i Clojure er dette et vanskeligt spørgsmål at besvare. Selv at beslutte, hvad der er en ramme, og hvad der er et bibliotek, kan være svært. Vi bliver nødt til at tage fat på det først.
hvad er (og ikke er) en internetramme
i denne vejledning definerer vi en internetramme som en samling af kode og afhængigheder, der giver en holistisk tilgang til opbygning af en internetapplikation. Denne definition udelukker flere biblioteker, der almindeligvis kaldes rammer, såsom Compojure og Ring, da de ikke i sig selv giver dig en tilgang. Der er dog stadig flere store kandidater, som jeg overvejer her.
fordi det at rulle din egen stak er et almindeligt alternativ i Clojure til at bruge en forudbygget ramme, og det kan betragtes som en holistisk tilgang (nemlig opbygge din applikation fra eksisterende biblioteker), mener jeg det også i anbefalingerne.
Anbefalingskriterier
formålet med denne vejledning er at give stærke anbefalinger til internetrammer til forskellige behov. Her er de kriterier, jeg undersøger om hver ramme:
dokumentation
har rammen let at følge dokumentation? Jeg ser efter begyndertutorials gennem avancerede emner.
fællesskab
et stort, aktivt fællesskab er en vigtig del af en rammes levedygtighed. Et stort samfund kan lettere levere, holde afhængigheder ajour og opbygge en mere komplet løsning.
modenhed
et projekts alder, og hvor længe det har været brugt i produktion på store steder, er en anden vigtig faktor. Jeg foretrækker ældre rammer, der er blevet implementeret til vigtige steder.
internetstandarder
udover de tre store internetsprog (HTML, CSS og JavaScript) er der standarderne for selve HTTP-protokollen og et væld af “bedste praksis”. Jeg taler om HTTP-responskoder, indholdsforhandling, CORS, hjemmesider osv. Hvordan gør rammerne brug af disse standarder? Hvordan krænker det dem?
tilgang
da en ramme skal give en holistisk tilgang, skal selve tilgangen tages i betragtning. Hvordan rammeprogrammet opbygning af en ansøgning?
Deployment
når din ansøgning er klar, skal den implementeres. Hvilke implementeringsmuligheder er tilgængelige? En bredere sort er bedre.
stærkt anbefalet
det føles underligt for mig at sige dette, men den bedste mulighed for begyndere er stadig at rulle din egen. At rulle din egen stak er ikke så svært, som det kan synes. Du kan bygge en funktionel stak fra en håndfuld biblioteker. Ganske ofte, de mere robuste, bygget til Dig rammer har gjort hundredvis af beslutninger for dig om, hvordan man opbygger stakken, men de stadig kræver, at du forstår legion af biblioteker, de valgte.
udover at være god til at lære, giver rullende din egen dig fuld kontrol til at understøtte eller ikke understøtte en given funktion.
den største ulempe er, at du skal træffe mange beslutninger for dig selv. Der er mange biblioteker derude, og at vælge blandt dem kan være et vanskeligt forslag. En trøst er, at når du sætter dine egne biblioteker sammen, i det mindste i Clojure, er det relativt nemt at skifte biblioteker, hvis du finder ud af, at man ikke virker for dig.
når du ønsker en mere komplet løsning (og du vil), hvis du fortsætter med at bygge det selv, vil du nå frem til noget, der er meget ligesom de mere robuste rammer. Jeg vil anbefale at skifte til en af de andre anbefalede løsninger i stedet for at opbygge din egen komplette ramme. Heldigvis er det nemt at skifte mellem dem, da de alle arbejder på Ringstandarden.
piedestal (GitHub)
piedestal er et modent sæt biblioteker, oprindeligt oprettet af Cognitect, til udvikling af moderne streaming-applikationer. Det er bygget op omkring langvarige forbindelser, der giver dig mulighed for at streame data fra serveren til klienten over tid. For at understøtte denne funktion opfandt piedestal ideen om interceptors, som giver dig en måde at definere rørledninger af asynkrone trin, som din anmodning gennemgår.
jeg anbefaler piedestal, fordi den er moden, har et aktivt samfund, den understøtter en lang række implementeringsmuligheder, og den har god support til internetapplikationer. De to banker imod det er dens dokumentation og dens mangel på en samlende tilgang. Det har nogle guider, der får dig gennem grundlæggende Hej, Verden! ansøgning. Men jeg har ikke fundet noget, der kan forklare, hvordan en komplet ansøgning skal sammensættes. Tilgangen piedestal Letter er at give det lave niveau fundament, du har brug for, som en piedestal, hvorpå du kan stå lidt højere end at starte fra bunden. For at være sikker er det grundlæggende vigtigt, men meget overlades til udvikleren at vælge og bygge sig selv. For eksempel har den målrettet ikke en HTML-skabelonløsning. Det kalder det “API-først”. Jeg forventer, at en komplet netramme har en løsning til oprettelse af HTML.
på trods af disse problemer anbefaler jeg piedestal som et solidt og fleksibelt fundament, hvorpå man kan bygge applikationer.
Luminus (GitHub)
Luminus er i det væsentlige et skabelonprojekt. Du opretter en ny hjemmeside ud fra den skabelon, og alt er sat op for dig. Luminus giver dig nogle muligheder for skabelonen, men generelt er dens tilgang at træffe valgene for dig—nogle gange give sine egne biblioteker og nogle gange bruge eksisterende biblioteker. Når dit projekt er oprettet, har du en komplet netstabel, som du kan bygge videre på eller ændre, som du finder passende. Den største fordel er den samlede vision, der styrede bibliotekernes valg.
Luminus sigter mod at levere alt hvad du behøver for at skrive applikationer. Du får alt fra ruter, til session management, til ClojureScript kompilering, til database migrationer. Det hele kommer forudkonfigureret, så du kan komme i gang med din applikationslogik med det samme. Tænk på lysende som det sæt biblioteker og konfigurationer, du ville bygge dig selv over 10 års arbejde med en applikation. Du har muligvis ikke brug for det i starten, men til sidst vil du have sikkerhed, logning, internationalisering, blandt andre bekymringer. Luminus giver det til dig med en kommando.
den største ulempe ved Luminus er, at mange af bibliotekerne udsættes direkte. Ja, det giver dig mulighed for at konfigurere dem som du vil. Men det betyder også, at du har meget at forstå, hvis du vil bygge videre på standardadfærden. Heldigvis er dokumentationshistorien fremragende. Der er endda en bog, der dokumenterer den anbefalede tilgang til opbygning af en internetapplikation ved hjælp af Luminus.
derudover har det eksisteret i årevis, været implementeret til store applikationer og har en række implementeringsmuligheder.
andre rammer af note
disse rammer er interessante for deres innovative tilgange.
Fulcro (GitHub)
Fulcro er en fullstack løsning. Det bruger React på frontend, men det har en komplet datamodel fra klient til database. Hvis den slags samlende vision er tiltalende, så prøv det. Der er fremragende dokumentation, og den er stadig aktivt udviklet.
kanal
kanal er en Leiningen-skabelon, der nærmer sig opbygning af en internetapplikation som et sæt konfigurationer. For eksempel i kanal er routing en konfiguration. Migration er en konfiguration. Ved hjælp af denne samlende, dataorienterede tilgang bygger du en internetapplikation, der kan genindlæses deterministisk. Rammen ser ud til at få trækkraft.
Tadam
Tadam har konfigureret en række eksisterende biblioteker og oprettet en standard mappestruktur for at gøre det meget nemt at skrive enkle sider. Det er stadig nyt, men aktivt.
Coast on Clojure (GitHub)
Coast on Clojure giver dig en komplet løsning (database til servering af HTML), mens du fokuserer på at holde tingene enkle.
Hoplon (GitHub)
Hoplon er en fullstack-løsning med en interessant tilgang. Frontend-delen samler ClojureScript og giver dig mulighed for at opbygge interaktive komponenter, der bruger en regnearklignende dataforløbsmodel. Det kan oprette forbindelse til backend ved at kalde funktioner, der er fuldmagter af funktioner på serveren. Dette giver dig mulighed for at omgå hele routingsituationen. Udviklingen på det er langsom.
anbefales ikke
disse rammer anbefales ikke, fordi de ikke er blevet udviklet aktivt for længe og aldrig har fået nok trækkraft. Jeg har ikke evalueret dem på tekniske fordele, fordi jeg ikke ville anbefale dem baseret på deres inaktive udvikling alene.
- NF
- Clojure on Coils
- joodoo
- Datsys
ikke rammer
disse projekter kaldes ofte rammer, men de opfylder ikke definitionen af “tilvejebringelse af en holistisk tilgang til opbygning af en internetapplikation”. Jeg har ikke evalueret dem her.