Question

Je connais CouchDB et l'idée de cartographier ses résultats aux objets Scala, ainsi que de trouver une façon naturelle de iteract avec elle, est venu immédiatement.

Mais je vois que les langues dynamiques tels que Ruby et Javascript font des choses très bien avec le JSON / centré sur le document / shchema sans aproche de CouchDB.

Tout bon aproche à faire des choses avec canapé dans les langues statiques?

Était-ce utile?

La solution

Je comprends que CouchDB fonctionne uniquement avec des objets JSON. Depuis JSON est typées, il est tentant de croire qu'il est plus naturellement adapté pour les langages dynamiques. Cependant, XML est généralement typées aussi, et Scala a un très bon soutien bibliothèque pour créer et manipuler XML. Pour une exploration des fonctionnalités XML de Scala, voir: http://www.ibm.com/ developerworks / bibliothèque / x-scalaxml /

De même avec JSON. Avec le soutien de la bibliothèque appropriée, traitant JSON peut se sentir naturel même dans les langues statiques. Pour une approche pour traiter les données JSON à Scala, consultez cet article: http://technically.us/code/x/weaving-tweed-with-scala-and-json/

Avec les bases de données d'objets en général, il est parfois commode de définir un « modèle » (en utilisant, par exemple, une classe dans la langue) et utiliser JSON ou XML ou une autre langue du document typées être une représentation sérialisée de la classe. le soutien de la bibliothèque appropriée peut alors se traduire entre la forme sérialisé (comme JSON) et les structures de données en mémoire, avec le typage statique et tous les goodies qui viennent avec lui. Pour un exemple de cette approche, voir Dossier de levage qui a ajouté des conversions vers et à partir JSON: http: //groups.google.com/group/liftweb/msg/63bb390a820d11ba

Autres conseils

Je me demande si vous avez posé la bonne question. Pourquoi utilisez-vous Scala, et non des langages dynamiques? Probablement à cause d'une bonté que Scala vous offre ce qui est important pour vous et, je suppose, la qualité de votre code. Alors, pourquoi ne vous utilisez une base de données « statiquement typé » (à savoir à base de schéma) soit? Encore une fois, je suis en train de prendre, mais la capacité à répondre au changement vient à l'esprit. La production des bases de données SQL ont une tendance horrible être très difficile de changer et refactoring.

Alors, vos données est faiblement typé, et votre code est fortement typée. Mais quelque part, vous aurez besoin de faire la transition. Cela signifie que quelque part, vous aurez un « schéma » pour vos données, même si la base de données n'a pas. Ce schéma est défini par les classes que vous êtes cartographie des documents Couch sur. Cela est parfaitement logique; la plupart des utilisations du canapé que je l'ai vu ont une clé tels que « type » et pour chaque type au moins une série commune de clés. Que ce soit pour la main-carte JSON à ces classes Scala ou d'utiliser par exemple outils de fantaisie de réflexion (plus lent mais assez), ou une caractéristique Scala même colombophile que je suis encore nouveau pour un détail. Commencez par le plus facile, mais lente, puis voir si elle est assez rapide.

La grande chose se produit lorsque vos classes, à savoir votre schéma, changement . Au lieu de ALTER'ing vos tables, vous pouvez simplement changer la classe, assurez-vous que vous faites quelque chose d'intelligent si pour un document clé que vous attendez manque (parce qu'elle était fondée sur une ancienne version de la classe), et vous voilà parti. En réponse au changement n'a jamais été aussi facile, et encore votre code est aussi statiquement typé qu'il peut obtenir.

Si cela ne suffit pas bon pour vous, et que vous voulez pas de schéma du tout, alors que vous dites effectivement que vous ne voulez pas utiliser des classes pour définir et manipuler vos données. C'est bien aussi (bien que je ne peux pas imaginer une utilisation), mais la question est pas dynamique vs langues statiques, mais de savoir si d'utiliser les langues basés sur les classes du tout.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top