Hvilken Webramme Skal Jeg Bruke i Clojure?

i denne veiledningen beskriver jeg de tilgjengelige webrammealternativene For Clojure og gir mine anbefalinger.

Rull din egen stabel fra anbefalte biblioteker (kommer snart) hvis du bare lærer. Det vil være den beste måten å forstå hvordan alt fungerer.

Bruk Pedestal hvis du vil ha et produksjonstestet grunnlag for å bygge søknaden din på.

Bruk Luminus hvis du vil ha fleksibiliteten til å rulle din egen stabel uten arbeidet involvert.

Innledning

Et spørsmål som jeg blir spurt mye av nybegynnere I Clojure er » Hvilken webramme skal jeg bruke ?»Dette er et godt spørsmål. I Python er Det Django. I PHP, Drupal. Og Selvfølgelig I Ruby er det kongen av alle webrammer, Ruby on Rails. Men I Clojure er dette et vanskelig spørsmål å svare på. Selv å bestemme hva som er et rammeverk og hva som er et bibliotek kan være vanskelig. Vi må ta opp det først.

Hva er (og ikke er) et webrammeverk

i denne veiledningen vil vi definere et webrammeverk som en samling av kode og avhengigheter som gir en helhetlig tilnærming til å bygge en webapplikasjon. Denne definisjonen utelukker flere biblioteker som ofte kalles rammer, for Eksempel Compojure og Ring, siden de ikke i seg selv gir deg en tilnærming. Men det er fortsatt flere store utfordrere som jeg anser her.

fordi det å rulle din egen stabel er et vanlig alternativ I Clojure til å bruke et forhåndsbygd rammeverk, og det kan betraktes som en helhetlig tilnærming (nemlig bygge søknaden din fra eksisterende biblioteker), anser jeg det også i anbefalingene.

Anbefalingskriterier

formålet med denne veiledningen er å gi sterke anbefalinger for webrammer for ulike behov. Her er kriteriene jeg undersøker om hvert rammeverk:

Dokumentasjon

har rammen lett å følge dokumentasjon? Jeg ser etter nybegynneropplæringer gjennom avanserte emner.

Fellesskap

et stort, aktivt fellesskap er en viktig del av et rammes levedyktighet. Et stort fellesskap kan lettere gi, holde avhengigheter oppdatert, og bygge en mer komplett løsning.

Modenhet

alderen på et prosjekt, og hvor lenge det har vært brukt i produksjon i store områder, er en annen viktig faktor. Jeg foretrekker eldre rammer som har blitt distribuert for betydelige nettsteder.

webstandarder

I Tillegg til de tre store webspråkene (HTML, CSS og JavaScript), er det standarder for HTTP-protokollen selv og en rekke «beste praksis». Jeg snakker OM HTTP-svarkoder, innholdsforhandling, KOR, WebSockets, etc. Hvordan bruker rammeverket disse standardene? Hvordan bryter det dem?

Tilnærming

siden et rammeverk må gi en helhetlig tilnærming, må tilnærmingen i seg selv tas i betraktning. Hvordan rammeverket tilnærming bygge en søknad?

Distribusjon

når programmet er klart, må det distribueres. Hvilke distribusjonsalternativer er tilgjengelige? Et bredere utvalg er bedre.

Sterkt anbefalt

det føles rart for meg å si dette, men det beste alternativet for nybegynnere er fortsatt å rulle din egen. Å rulle din egen stabel er ikke så vanskelig som det kan virke. Du kan bygge en funksjonell stabel fra en håndfull biblioteker. Ofte har de mer robuste, bygget for deg rammer gjort hundrevis av beslutninger for deg om hvordan du bygger stakken, men de krever fortsatt at du forstår legion of libraries de valgte.

foruten å være bra for læring, rulle din egen gir deg full kontroll for å støtte eller ikke støtte en gitt funksjon.

den største ulempen er at du må ta mange beslutninger for deg selv. Det er mange biblioteker der ute, og å velge blant dem kan være et vanskelig forslag. En trøst er at når du setter dine egne biblioteker sammen, i Hvert Fall I Clojure, er det relativt enkelt å bytte biblioteker hvis du finner ut at man ikke fungerer for deg.

Når du vil ha en mer komplett løsning (og du vil), hvis du fortsetter å bygge den selv, kommer du til noe som er veldig mye som de mer robuste rammene. Jeg vil anbefale å bytte til en av de andre anbefalte løsningene i stedet for å bygge ditt eget komplette rammeverk. Heldigvis, bytte mellom dem er lett siden de alle jobber På Ringen standard.

Pidestall (GitHub)

Pidestall er en moden sett av biblioteker, opprinnelig laget Av Cognitect, for å utvikle moderne, streaming web-applikasjoner. Den er bygget rundt langlivede tilkoblinger som lar deg streame data fra serveren til klienten over tid. For å støtte denne funksjonen oppfant Piedestal ideen om interceptors, som gir deg en måte å definere rørledninger av asynkrone trinn som forespørselen din går gjennom.

jeg anbefaler Piedestal fordi den er moden, har et aktivt fellesskap, det støtter et stort utvalg av distribusjonsalternativer, og det har god støtte for webapplikasjoner. De to slag mot det er dens dokumentasjon og dens mangel på en samlende tilnærming. Den har noen guider som vil komme deg Gjennom grunnleggende Hei, Verden! søknader. Men jeg har ikke funnet noe som vil forklare hvordan en komplett soknad skal settes sammen. Tilnærmingen Pidestall forenkler er å gi lavt nivå grunnarbeidet du trenger, som en pidestall som å stå litt høyere enn å starte fra scratch. For å være sikker, er grunnarbeidet viktig, men mye er igjen til utvikleren å velge og bygge seg selv. For eksempel har det målrettet ikke EN HTML-templerende løsning. Det kaller DET «API-først». Jeg forventer en komplett web rammeverk for å ha en løsning for å lage HTML.

til tross for disse problemene, anbefaler Jeg Sokkel som et solid og fleksibelt fundament for å bygge applikasjoner.

Luminus (GitHub)

Luminus er i hovedsak et malprosjekt. Du oppretter et nytt webprogram fra den malen, og alt er satt opp for deg. Luminus gir deg noen alternativer for malen, men generelt er tilnærmingen å gjøre valgene for deg – noen ganger gir sine egne biblioteker og noen ganger bruker eksisterende biblioteker. Når prosjektet er opprettet, vil du ha en komplett web stabel som er ditt å bygge på eller endre som du ønsker. Den største fordelen er den enhetlige visjonen som styrte valg av biblioteker.

Luminus har som mål å gi alt du trenger for å skrive webapplikasjoner. Du får alt fra ruter, til øktstyring, Til ClojureScript-kompilering, til databaseoverføringer. Alt kommer forhåndskonfigurert, slik at du kan komme i gang med din søknad logikk med en gang. Tenk På Lysende som settet med biblioteker og konfigurasjoner du vil bygge deg selv over 10 års arbeid på et program. Du trenger kanskje ikke det først, men til slutt vil du ha sikkerhet, logging, internasjonalisering, blant andre bekymringer. Luminus gir det til deg med en kommando.

den største ulempen Med Luminus er at mange av bibliotekene er eksponert direkte. Ja, det gir deg muligheten til å konfigurere dem som du vil. Men det betyr også at du har mye å forstå hvis du vil bygge på standardadferd. Heldigvis er dokumentasjonshistorien utmerket. Det er enda en bok som dokumenterer den anbefalte tilnærmingen til å bygge et webprogram ved Hjelp Av Luminus.

i tillegg har den eksistert i årevis, blitt distribuert for store applikasjoner, og har en rekke distribusjonsalternativer.

Andre rammer av notat

disse rammene er interessante for deres innovative tilnærminger.

Fulcro (GitHub)

Fulcro er en fullstack-løsning. Den bruker React på frontend, men den har en komplett datamodell fra klient til database. Hvis den slags samlende visjon er tiltalende, gi det et forsøk. Det er utmerket dokumentasjon og det er fortsatt aktivt utviklet.

Duct

Duct er en leiningmal som nærmer seg å bygge en webapplikasjon som et sett med konfigurasjoner. For Eksempel, i Kanal er ruting en konfigurasjon. Migrasjon er en konfigurasjon. Ved hjelp av denne samlende, data-orientert tilnærming, bygger du en web-applikasjon som kan lastes på nytt deterministisk. Rammen ser ut til å få trekkraft.

Tadam

Tadam har konfigurert en rekke eksisterende biblioteker Og opprettet en standard katalogstruktur for å gjøre det enkelt å skrive enkle nettsteder. Den er ny, men aktiv.

Coast on Clojure (GitHub)

Coast on Clojure gir deg en full løsning (database til servering HTML) mens du fokuserer på å holde ting enkelt.

Hoplon (GitHub)

Hoplon Er en fullstack løsning med en interessant tilnærming. Frontend-delen kompilerer ClojureScript og lar deg bygge interaktive komponenter som bruker en regnearklignende dataflytmodell. Den kan koble til backend ved å ringe funksjoner som er proxyer av funksjoner på serveren. Dette lar deg omgå hele rutingssituasjonen. Utviklingen på det er sakte.

Ikke anbefalt

disse rammene anbefales ikke Fordi de ikke har blitt aktivt utviklet for lenge og aldri fått nok trekkraft. Jeg har ikke vurdert dem på tekniske meritter fordi jeg ikke vil anbefale dem basert på deres inaktive utvikling alene.

  • webnf
  • Clojure På Spoler
  • joodoo
  • Datsys

Ikke rammer

disse prosjektene kalles ofte rammer, men de oppfyller ikke definisjonen av «å gi en helhetlig tilnærming til å bygge en webapplikasjon». Jeg har ikke vurdert dem her.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.