welk webframework moet Ik gebruiken in Clojure?

in deze gids beschrijf ik de beschikbare web framework opties voor Clojure en geef ik mijn aanbevelingen.

rol je eigen stack uit aanbevolen bibliotheken (binnenkort) als je net aan het leren bent. Het zal de beste manier zijn om te begrijpen hoe alles werkt.

gebruik Pedestal als u een productie-geteste basis wilt waarop u uw applicatie kunt bouwen.

gebruik Luminus als u de flexibiliteit wilt van het rollen van uw eigen stapel zonder het werk.

Inleiding

een vraag die veel gesteld wordt door beginners in Clojure is ” welk web framework moet ik gebruiken?”Dat is een goede vraag. In Python is Django. In PHP, Drupal. En natuurlijk in Ruby, is er de koning van alle web frameworks, Ruby on Rails. Maar in Clojure is dit een moeilijke vraag om te beantwoorden. Zelfs beslissen wat een framework is en wat een bibliotheek is kan moeilijk zijn. Dat moeten we eerst aanpakken.

Wat is (en niet) een web framework

in het kader van deze gids zullen we een web framework definiëren als een verzameling code en afhankelijkheden die een holistische benadering bieden voor het bouwen van een webapplicatie. Deze definitie sluit verschillende bibliotheken uit die vaak frameworks worden genoemd, zoals Compojure en Ring, omdat die je op zichzelf geen benadering geven. Er zijn echter nog steeds een aantal grote kanshebbers die ik hier beschouw.

omdat het rollen van je eigen stack in Clojure een algemeen alternatief is voor het gebruik van een pre-built framework, en het kan worden beschouwd als een holistische benadering (namelijk, bouw je applicatie uit bestaande bibliotheken), beschouw ik dat ook in de aanbevelingen.

Aanbevelingscriteria

het doel van deze gids is krachtige aanbevelingen te doen voor webkaders voor verschillende behoeften. Hier zijn de criteria die ik voor elk raamwerk onder de loep neem:

documentatie

heeft het raamwerk gemakkelijk te volgen documentatie? Ik kijk voor beginner tutorials door middel van geavanceerde onderwerpen.

gemeenschap

een grote, actieve gemeenschap is een belangrijk onderdeel van de levensvatbaarheid van een kader. Een grote gemeenschap kan gemakkelijker bieden, afhankelijkheden up-to-date te houden, en het bouwen van een meer complete oplossing.

looptijd

de leeftijd van een project, en hoe lang het is gebruikt bij de productie op grote locaties, is een andere belangrijke factor. Ik geef de voorkeur aan oudere frameworks die zijn ingezet voor belangrijke sites.

webstandaarden

naast de drie grote webtalen (HTML, CSS en JavaScript) zijn er de standaarden voor het HTTP-protocol zelf en een groot aantal “best practices”. Ik heb het over HTTP response codes, content negotiation, CORS, WebSockets, enz. Hoe maakt het kader gebruik van deze normen? Hoe schendt het hen?

benadering

aangezien een kader een holistische benadering moet bieden, moet met de benadering zelf rekening worden gehouden. Hoe werkt de kaderaanpak bij het opbouwen van een toepassing?

implementatie

wanneer uw toepassing klaar is, moet deze worden geïmplementeerd. Welke implementatieopties zijn beschikbaar? Een bredere variëteit is beter.

ten zeerste aanbevolen

het voelt vreemd om dit te zeggen, maar de beste optie voor beginners is nog steeds om je eigen te rollen. Het rollen van uw eigen stack is niet zo moeilijk als het lijkt. Je kunt een functionele stack bouwen uit een handvol bibliotheken. Vaak hebben de meer robuuste, voor u gebouwde frameworks honderden beslissingen voor u gemaakt over hoe u de stack moet bouwen, maar ze vereisen nog steeds dat u het Legioen van bibliotheken begrijpt die ze kozen.

naast het feit dat het goed is om te leren, geeft rolling your own je volledige controle over het al dan niet ondersteunen van een bepaalde functie.

het grootste nadeel is dat je veel beslissingen voor jezelf moet nemen. Er zijn veel bibliotheken die er zijn en het kiezen onder hen kan een moeilijke propositie zijn. Een troost is dat, wanneer je je eigen bibliotheken samenstelt, in ieder geval in Clojure, het relatief eenvoudig is om van Bibliotheek te wisselen als je merkt dat die niet voor jou werkt.

Als u een meer complete oplossing wilt (en dat zal gebeuren), als u doorgaat met het zelf bouwen, komt u tot iets dat erg lijkt op de meer robuuste frameworks. Ik zou aanraden over te schakelen naar een van de andere aanbevolen oplossingen in plaats van het bouwen van uw eigen complete framework. Gelukkig, schakelen tussen hen is gemakkelijk omdat ze allemaal werken op de Ring standaard.Pedestal (GitHub)

Pedestal is een volwassen verzameling bibliotheken, oorspronkelijk gemaakt door Cognitect, voor het ontwikkelen van moderne, streaming webapplicaties. Het is gebouwd rond langlevende verbindingen die u in staat stellen om gegevens te streamen van de server naar de client na verloop van tijd. Om die functie te ondersteunen, Pedestal uitgevonden het idee van interceptors, die u een manier om pijpleidingen van asynchrone stappen die uw verzoek gaat door te definiëren.

Ik adviseer Pedestal omdat het volwassen is, een actieve gemeenschap heeft, een grote verscheidenheid aan implementatieopties ondersteunt en goede ondersteuning heeft voor webapplicaties. De twee tegenslagen zijn de documentatie en het gebrek aan een verenigende aanpak. Het heeft een aantal gidsen die je door basis Hello, World! toepassing. Maar ik heb niets gevonden dat verklaart hoe een volledige aanvraag moet worden samengesteld. De benadering voetstuk vergemakkelijkt is om het lage niveau grondwerk dat u nodig hebt, als een voetstuk waarop te staan een beetje groter dan vanaf nul. Om zeker te zijn, dat grondwerk is belangrijk, maar veel wordt overgelaten aan de ontwikkelaar om zelf te kiezen en te bouwen. Bijvoorbeeld, het heeft doelbewust geen HTML templating oplossing. Het noemt dat “API-first”. Ik zou verwachten dat een compleet web framework een oplossing heeft voor het maken van HTML.

ondanks deze problemen, raad ik Pedestal aan als een solide en flexibele basis waarop applicaties kunnen worden gebouwd.

Luminus (GitHub)

Luminus is in wezen een template project. U maakt een nieuwe webtoepassing van dat sjabloon, en alles is voor u ingesteld. Luminus geeft u een aantal opties voor de template, maar in het algemeen, zijn aanpak is om de keuzes te maken voor u—soms het verstrekken van zijn eigen bibliotheken en soms het gebruik van bestaande bibliotheken. Wanneer je project is gemaakt, heb je een complete web stack die van jou is om op te bouwen of aan te passen naar eigen inzicht. Het belangrijkste voordeel is de uniforme visie die de keuzes van bibliotheken heeft geleid.

Luminus biedt alles wat u nodig hebt om webapplicaties te schrijven. Je krijgt alles van routes, sessiebeheer, ClojureScript compilatie, database migraties. Het wordt allemaal voorgeconfigureerd, zodat u meteen aan de slag kunt met uw applicatielogica. Denk aan Luminous zoals de set van bibliotheken en configuraties die je zelf zou bouwen over 10 jaar van het werk aan een toepassing. Misschien heb je het in eerste instantie niet nodig, maar uiteindelijk zul je beveiliging, logging, internationalisering, onder andere zorgen willen. Luminus geeft je dat met één commando.

het grootste nadeel van Luminus is dat veel van de bibliotheken direct worden blootgesteld. Ja, Dat geeft je de macht om ze te configureren zoals je wilt. Maar het betekent ook dat je veel te begrijpen hebt als je wilt voortbouwen op het standaard gedrag. Gelukkig is het documentatieverhaal uitstekend. Er is zelfs een boek dat de aanbevolen aanpak van het bouwen van een webapplicatie met behulp van Luminus documenteert.

bovendien bestaat het al jaren, wordt het ingezet voor grote toepassingen en heeft het een verscheidenheid aan implementatieopties.

andere kaders van noot

deze kaders zijn interessant vanwege hun innovatieve benaderingen.

Fulcro (GitHub)

Fulcro is een volledige oplossing. Het gebruikt React op de frontend, maar het heeft een volledig gegevensmodel van client naar database. Als dat soort verenigende visie aantrekkelijk is, probeer het dan. Er is uitstekende documentatie en het is nog steeds actief ontwikkeld.

kanaal

kanaal is een leiningen template die het bouwen van een webapplicatie benadert als een set van configuraties. Bijvoorbeeld, in kanaal, routing is een configuratie. Migratie is een configuratie. Met behulp van deze unifying, data-georiënteerde aanpak, u een webapplicatie die deterministisch kan worden herladen bouwen. Het raamwerk lijkt tractie te krijgen.

Tadam

Tadam heeft een aantal bestaande bibliotheken geconfigureerd en een standaard directorystructuur gemaakt om het schrijven van eenvoudige sites zeer eenvoudig te maken. Het is nog steeds nieuw, maar actief.

Coast on Clojure (GitHub)

Coast on Clojure geeft u een volledige oplossing (database voor het aanbieden van HTML) terwijl u zich concentreert op het eenvoudig houden van dingen.

Hoplon (GitHub)

Hoplon is een volledige oplossing met een interessante aanpak. De frontend deel compileert ClojureScript en kunt u interactieve componenten die een spreadsheet-achtige Dataflow model te bouwen. Het kan verbinding maken met de backend door functies aan te roepen die proxies van functies op de server zijn. Hiermee kunt u de hele routing situatie te omzeilen. Ontwikkeling op het is traag.

niet aanbevolen

deze kaders worden niet aanbevolen omdat ze niet al te lang actief zijn ontwikkeld en nooit voldoende aandacht hebben gekregen. Ik heb ze niet geëvalueerd op technische merites, omdat ik ze niet zou aanraden op basis van hun inactieve ontwikkeling alleen.

  • webnf
  • Clojure on Coils
  • joodoo
  • Datsys

geen frameworks

deze projecten worden vaak frameworks genoemd, maar voldoen niet aan de definitie van “het bieden van een holistische benadering van het bouwen van een webapplicatie”. Ik heb ze hier niet geëvalueerd.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.