In questa guida, descrivo le opzioni di framework Web disponibili per Clojure e fornisco i miei consigli.
Arrotola il tuo stack dalle librerie consigliate (in arrivo) se stai solo imparando. Sarà il modo migliore per capire come funziona tutto.
Utilizzare Piedistallo se si desidera una base testata in produzione su cui costruire l’applicazione.
Utilizzare Luminus se si desidera la flessibilità di rotolare il proprio stack senza il lavoro coinvolto.
- Introduzione
- Che cos’è (e non è) un framework web
- Criteri di raccomandazione
- Documentazione
- Comunità
- Maturità
- Standard Web
- Approccio
- Distribuzione
- Altamente raccomandato
- Piedistallo (GitHub)
- Luminus (GitHub)
- Altri framework di nota
- Fulcro (GitHub)
- Duct
- Tadam
- Coast on Clojure (GitHub)
- Hoplon (GitHub)
- Non raccomandato
- Not frameworks
Introduzione
Una domanda che mi viene posta molto dai principianti in Clojure è ” Quale framework web dovrei usare?”Questa è una buona domanda. In Python, c’è Django. In PHP, Drupal. E naturalmente in Ruby, c’è il re di tutti i framework web, Ruby on Rails. Ma in Clojure, questa è una domanda difficile a cui rispondere. Anche decidere cos’è un framework e cos’è una libreria può essere difficile. Dovremo affrontarlo prima.
Che cos’è (e non è) un framework web
Ai fini di questa guida, definiremo un framework Web come una raccolta di codice e dipendenze che forniscono un approccio olistico alla creazione di un’applicazione web. Questa definizione esclude diverse librerie che sono comunemente chiamate framework, come Compojure e Ring, poiché quelle non forniscono, da sole, un approccio. Tuttavia, ci sono ancora diversi grandi contendenti che considero qui.
Poiché rotolare il proprio stack è un’alternativa comune in Clojure all’utilizzo di un framework pre-costruito, e può essere considerato un approccio olistico (vale a dire, costruire la tua applicazione da librerie esistenti), lo considero anche nelle raccomandazioni.
Criteri di raccomandazione
Lo scopo di questa guida è quello di fornire forti raccomandazioni per i framework web per esigenze diverse. Ecco i criteri che esamino su ciascun framework:
Documentazione
Il framework ha una documentazione facile da seguire? Cerco tutorial per principianti attraverso argomenti avanzati.
Comunità
Una grande comunità attiva è una parte importante della redditività di un quadro. Una grande comunità può fornire più facilmente, mantenere aggiornate le dipendenze e creare una soluzione più completa.
Maturità
L’età di un progetto, e per quanto tempo è stato utilizzato nella produzione in siti su larga scala, è un altro fattore importante. Preferisco i framework più vecchi che sono stati distribuiti per siti significativi.
Standard Web
Oltre ai tre grandi linguaggi web (HTML, CSS e JavaScript), ci sono gli standard per il protocollo HTTP stesso e una serie di “best practice”. Sto parlando di codici di risposta HTTP, negoziazione dei contenuti, CORS, WebSockets, ecc. In che modo il quadro si avvale di tali norme? Come li viola?
Approccio
Poiché un framework deve fornire un approccio olistico, l’approccio stesso deve essere preso in considerazione. Come si avvicina il framework alla costruzione di un’applicazione?
Distribuzione
Quando l’applicazione è pronta, deve essere distribuita. Quali opzioni di distribuzione sono disponibili? Una varietà più ampia è migliore.
Altamente raccomandato
Mi sembra strano dirlo, ma l’opzione migliore per i principianti è ancora quella di lanciare il tuo. Rotolare il proprio stack non è così difficile come potrebbe sembrare. Puoi creare uno stack funzionale da una manciata di librerie. Molto spesso, i framework più robusti e costruiti per te hanno preso centinaia di decisioni su come costruire lo stack, ma richiedono comunque di comprendere la legione di librerie che hanno scelto.
Oltre ad essere buono per l’apprendimento, rolling your own ti dà il controllo completo per supportare o non supportare una determinata funzione.
Il più grande svantaggio è che devi prendere molte decisioni per te stesso. Ci sono molte biblioteche là fuori e scegliere tra di loro può essere una proposta difficile. Una consolazione è che, quando si mettono insieme le proprie librerie, almeno in Clojure, è relativamente facile cambiare libreria se si scopre che non funziona per te.
Quando vuoi una soluzione più completa (e lo farai), se continui a costruirla da solo, arriverai a qualcosa che è molto simile ai framework più robusti. Consiglierei di passare a una delle altre soluzioni raccomandate piuttosto che creare il proprio framework completo. Per fortuna, il passaggio tra di loro è facile dal momento che tutti lavorano sullo standard Anello.
Piedistallo (GitHub)
Piedistallo è un insieme maturo di librerie, originariamente creato da Cognitect, per lo sviluppo di moderne applicazioni web in streaming. È costruito attorno a connessioni di lunga durata che consentono di trasmettere dati dal server al client nel tempo. Per supportare tale funzione, Piedistallo inventato l’idea di intercettori, che vi darà un modo per definire pipeline di passi asincroni che la vostra richiesta passa attraverso.
Consiglio Piedistallo perché è maturo, ha una comunità attiva, supporta una grande varietà di opzioni di distribuzione e ha un buon supporto per le applicazioni web. I due colpi contro di essa sono la sua documentazione e la sua mancanza di un approccio unificante. Ha alcune guide che ti porteranno attraverso basic Hello, World! applicazione. Ma non ho trovato nulla che spiegherà come un’applicazione completa dovrebbe essere messo insieme. Il piedistallo approccio facilita è quello di fornire le basi di basso livello è necessario, come un piedistallo su cui stare un po ‘ più alto di partire da zero. Per essere sicuri, che il lavoro di base è importante, ma molto è lasciato allo sviluppatore di scegliere e costruire se stessi. Ad esempio, non ha intenzionalmente una soluzione di template HTML. Lo chiama “API-first”. Mi aspetto che un framework web completo abbia una soluzione per la creazione di HTML.
Nonostante questi problemi, raccomando Piedistallo come una base solida e flessibile su cui costruire applicazioni.
Luminus (GitHub)
Luminus è essenzialmente un progetto modello. Si crea una nuova applicazione web da quel modello, e tutto è impostato per voi. Luminus offre alcune opzioni per il modello, ma in generale, il suo approccio è quello di fare le scelte per voi—a volte fornendo le proprie librerie e talvolta utilizzando librerie esistenti. Quando il tuo progetto viene creato, avrai uno stack Web completo che è tuo da costruire o modificare come meglio credi. Il vantaggio principale è la visione unificata che ha guidato le scelte delle biblioteche.
Luminus mira a fornire tutto il necessario per scrivere applicazioni web. Ottieni tutto, dai percorsi, alla gestione delle sessioni, alla compilazione di ClojureScript, alle migrazioni del database. Tutto viene preconfigurato, in modo da poter iniziare subito con la logica dell’applicazione. Pensa a Luminous come l’insieme di librerie e configurazioni che ti costruiresti in 10 anni di lavoro su un’applicazione. All’inizio potresti non averne bisogno, ma alla fine vorrai sicurezza, registrazione, internazionalizzazione, tra le altre preoccupazioni. Luminus te lo dà con un solo comando.
Lo svantaggio principale di Luminus è che molte delle librerie sono esposte direttamente. Sì, questo ti dà il potere di configurarli come vuoi. Ma significa anche che hai molto da capire se vuoi costruire sul comportamento predefinito. Fortunatamente, la storia della documentazione è eccellente. C’è anche un libro che documenta l’approccio consigliato per costruire un’applicazione web utilizzando Luminus.
Inoltre, è in circolazione da anni, è stato distribuito per applicazioni di grandi dimensioni e ha una varietà di opzioni di distribuzione.
Altri framework di nota
Questi framework sono interessanti per i loro approcci innovativi.
Fulcro (GitHub)
Fulcro è una soluzione fullstack. Usa React sul frontend, ma ha un modello di dati completo dal client al database. Se questo tipo di visione unificante è attraente, provalo. C’è una documentazione eccellente ed è ancora attivamente sviluppata.
Duct
Duct è un modello di leiningen che si avvicina alla costruzione di un’applicazione Web come un insieme di configurazioni. Ad esempio, in Duct, il routing è una configurazione. La migrazione è una configurazione. Utilizzando questo approccio unificante e orientato ai dati, si crea un’applicazione Web che può essere ricaricata in modo deterministico. Il quadro sembra essere sempre trazione.
Tadam
Tadam ha configurato un certo numero di librerie esistenti e creato una struttura di directory standard per rendere la scrittura di siti semplici molto facile. È ancora nuovo ma attivo.
Coast on Clojure (GitHub)
Coast on Clojure ti offre una soluzione completa (database per servire HTML) mentre ti concentri sul mantenere le cose semplici.
Hoplon (GitHub)
Hoplon è una soluzione fullstack con un approccio interessante. La parte frontend compila ClojureScript e consente di creare componenti interattivi che utilizzano un modello di flusso di dati simile a un foglio di calcolo. Può connettersi al backend chiamando funzioni che sono proxy di funzioni sul server. Ciò consente di ignorare l’intera situazione di routing. Lo sviluppo su di esso è lento.
Non raccomandato
Questi framework non sono raccomandati perché non sono stati sviluppati attivamente per troppo tempo e non hanno mai ottenuto abbastanza trazione. Non li ho valutati per meriti tecnici perché non li consiglierei in base al loro sviluppo inattivo da solo.
- webnf
- Clojure on Coils
- joodoo
- Datsys
Not frameworks
Questi progetti sono spesso chiamati framework ma non soddisfano la definizione di “fornire un approccio olistico alla costruzione di un’applicazione web”. Non li ho valutati qui.