Domanda

ho familiarità con CouchDB e l'idea di mappare i suoi risultati agli oggetti Scala, così come trovare un modo naturale per iteract con esso, è venuto subito.

Ma vedo che linguaggi dinamici come Ruby e JavaScript fare le cose molto bene con l'aproach JSON / documento-centrica / libera shchema-di CouchDB.

Ogni buon aproach di fare le cose con divano in linguaggi statici?

È stato utile?

Soluzione

Capisco che CouchDB funziona esclusivamente con oggetti JSON. Dal momento che JSON è tipizzato, si è tentati di credere che sia più naturalmente adatto per linguaggi dinamici. Tuttavia, XML è generalmente non tipizzato troppo, e Scala ha un ottimo supporto delle librerie per creare e manipolare XML. Per l'esplorazione della funzionalità XML di Scala, vedi: http://www.ibm.com/ developerWorks / library / x-scalaxml /

Allo stesso modo con JSON. Con il giusto supporto della libreria, si occupano di JSON può sentire naturale anche in linguaggi statici. Per un approccio alla gestione dei dati JSON in Scala, si veda questo articolo: http://technically.us/code/x/weaving-tweed-with-scala-and-json/

Con database degli oggetti in generale, a volte è conveniente definire un "modello" (utilizzando, ad esempio, una classe in lingua) e utilizzare JSON o XML o qualche altro linguaggio del documento non tipizzato per essere una rappresentazione serializzata della classe. libreria di supporto adeguato può quindi tradurre tra la forma serializzata (come JSON) e in memoria strutture di dati, con tipizzazione statica e tutti gli oggetti che vengono con esso. Per un esempio di questo approccio, vedere Registrazione di sollevamento che ha aggiunto conversioni da e per JSON: http: //groups.google.com/group/liftweb/msg/63bb390a820d11ba

Altri suggerimenti

Mi chiedo se lei ha chiesto la domanda giusta. Perché stai usando Scala, e non linguaggi dinamici? Probabilmente a causa di qualche bene che Scala si prevede che è importante per voi e, presumo, la qualità del codice. Allora perché non stai utilizzando un database "staticamente tipizzato" (vale a dire schema-base)? Ancora una volta sto solo supponendo, ma la capacità di rispondere ai cambiamenti viene in mente. database di produzione di SQL hanno una terribile tendenza di essere molto difficili da cambiare e refactoring.

Quindi, il tuo Dati è debolmente tipizzato, e il tuo codice è fortemente tipizzato. Ma da qualche parte è necessario effettuare la transizione. Ciò significa che da qualche parte, avrete un "schema" per i dati anche se il database non ne ha. Questo schema è definito dalle classi si sta mappando i documenti Couch su. Questo ha un senso perfetto; la maggior parte degli usi di divano che ho visto hanno una chiave come "tipo" e per ogni tipo almeno alcuni insieme comune di chiavi. Sia a portata di mano-mappare il JSON per queste classi Scala o da usare per esempio strumenti di fantasia di riflessione (più lento, ma abbastanza), o alcuni addirittura più elaborato funzione Scala che io sono ancora nuovo a è un dettaglio. Inizia con quello facile, ma-lento, poi vedere se è abbastanza veloce.

avviene la grande cosa quando le vostre classi, vale a dire lo schema, variazione . Invece di ALTER'ing tabelle, si può semplicemente cambiare la classe, in modo che si fa qualcosa di intelligente, se per qualche documento di una chiave che ci si aspetta manca (perché era basato su una versione precedente della classe), e il gioco è fatto. In risposta al cambiamento non è mai stato così facile, e ancora il codice è digitato come staticamente come si può ottenere.

Se questo non è abbastanza buono per voi, e si vuole nessuno schema a tutti, allora si sta effettivamente dicendo che non si desidera utilizzare le classi per definire e manipolare i dati. Questo va bene troppo (anche se non riesco a immaginare un uso), ma allora la questione non si tratta di dinamiche vs linguaggi statici, ma sul fatto di usare linguaggi OO basati su classi a tutti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top