2016-04-18 11 views
7

Quindi, idealmente, secondo me, sulla base di una singola definizione schema, dovrei essere in grado di generare completamente la creazione di un aggiornamento di lettura (CRUD) in un contesto web, vale a dire:C'è qualcosa per CRUD generico in forme clojure/clojurescript

  • cliente: una componente tabella di dati HTML interattivo per le operazioni, magari con la modifica in linea, ecc
  • cliente: un componente modulo per la modifica di un singolo record, tra cui la validazione come si deduce dallo schema
  • server: una route per accedere ai dati per il popolamento e l'aggiornamento di tali componenti (endpoint REST) ​​
  • server
  • : un'implementazione per la permanenza dei dati, ad esempio, in una tabella SQL.

Quindi idealmente; definirei semplicemente uno schema per, diciamo, un tipo di dati Person con nome e cognome e campi dell'indirizzo, e quindi chiamo una macro o una funzione come (defcrud Person my-person-schema) e funziona, posso andare su una pagina web, vedere i dati, modificare/cancellare i dati e salvare i dati fino al server.

La mia domanda è: c'è qualcosa nel mondo dei clojure che fa qualcosa (o parzialmente) come descritto sopra?

Nel mio recente progetto full clj/cljs, mi sono ritrovato a scrivere un sacco di codice per questa roba di base. Nei tempi passati, quando utilizzavo un framework GWT chiamato SmartGWT, dovevo semplicemente definire un new ListGrid(myDataSource) e definire un'origine dati (equivalente allo schema), e il resto veniva dedotto (almeno qualcosa con impostazioni predefinite sensibili era).

Il tipo di alto livello SmartGWT di sviluppo è ciò che consente la vera prototipazione rapida per il tipo di app aziendali che ho bisogno di costruire abbastanza spesso. GWT ha i suoi svantaggi, come il tempo di compilazione molto lento per le app più grandi e il fatto che devo scrivere Java, ma è il livello di integrazione server-client che sto cercando in Clojure.

risposta

3

Disclaimer, sono l'autore di closp-crud.

Innanzitutto, grazie a @mac per accennare al mio catalogo.

In secondo luogo, quello che chiedi è esattamente ciò che voglio ottenere, ma in un modo diverso. Odio tutta la magia che accade quando fai cose come il codice inferenziale. Quindi il mio approccio è diverso, in quanto tutto il codice:

  • modelli HTML
  • rotte
  • migrazioni
  • accesso db

è generato e può essere completamente modificato in seguito.
Ovviamente questo ha altri svantaggi, ma li prenderò volentieri.

Detto questo, la documentazione è ancora carente, ho iniziato un incentivo con: http://closp.net la settimana scorsa e continuerò a lavorarci.
Potrei anche aggiungere documenti per closp-crud, se necessario.

Oltre a ciò ho realizzato un video introduttivo due giorni fa: https://www.livecoding.tv/sveri/videos/wrnL1-clojure-closp-webframework-41 che mostra l'utilizzo di closp e closp-crud in un modo molto semplice.
L'utilizzo di closp-crud inizia circa 12 minuti.