Pergunta

Eu estou familiarizado com CouchDB ea idéia de mapear seus resultados para Scala objetos, bem como achado alguma forma natural para iteract com ele, veio imediatamente.

Mas vejo que linguagens dinâmicas como Ruby e Javascript fazer as coisas muito bem com o json aproach livre de shchema / document-centric / do CouchDB.

Qualquer bom aproach para fazer as coisas com Couch em linguagens estáticas?

Foi útil?

Solução

Eu entendo que CouchDB funciona exclusivamente com objetos JSON. Desde JSON é sem tipo, é tentador acreditar que é mais naturalmente adequadas para linguagens dinâmicas. No entanto, XML é geralmente untyped também, e Scala tem suporte muito bom biblioteca para criação e manipulação de XML. Para uma exploração de recursos XML do Scala, consulte: http://www.ibm.com/ developerworks / biblioteca / x-scalaxml /

Da mesma forma com JSON. Com o apoio da biblioteca apropriada, lidar com JSON pode se sentir ainda natural em linguagens estáticas. Para uma abordagem para lidar com dados JSON em Scala, consulte este artigo: http://technically.us/code/x/weaving-tweed-with-scala-and-json/

Com banco de dados orientado a objetos em geral, às vezes é conveniente definir um "modelo" (usando, por exemplo, uma classe na língua) e usar JSON ou XML ou algum outro idioma do documento untyped ser uma representação serializada da classe. apoio de biblioteca adequada pode então traduzir entre a forma serializada (como JSON) e as estruturas de dados na memória, com tipagem estática e todas as guloseimas que vêm com ele. Para um exemplo desta abordagem, consulte Gravar do elevador que adicionou conversões para e de JSON: http: //groups.google.com/group/liftweb/msg/63bb390a820d11ba

Outras dicas

Gostaria de saber se você fez a pergunta certa. Por que você está usando Scala, e não linguagens dinâmicas? Provavelmente por causa de alguma bondade que Scala fornece-lhe o que é importante para você e, presumo, sua qualidade de código. Então porque você não está usando um "tipagem estática" banco de dados (com base em esquema ou seja), quer? Mais uma vez eu só estou assumindo, mas a capacidade de responder à mudança vem à mente. bancos de dados SQL de produção têm uma tendência horrível de ser muito difícil mudar e refatorar.

Assim, sua dados é fracamente tipado, e sua código é fortemente tipado. Mas em algum lugar você vai precisar para fazer a transição. Isto significa que em algum lugar, você vai ter um "esquema" para seus dados, mesmo que o banco de dados não tem nenhum. Este esquema é definido pelas classes você está mapeando documentos Couch em. Isso faz sentido; a maioria dos usos de Couch que eu vi tem uma chave tais como "tipo" e para cada tipo de pelo menos alguns conjunto comum de chaves. Se a mão-mapear o JSON para estas classes Scala ou para usar, por exemplo, ferramentas de fantasia reflexão (mais lento, mas muito), ou alguns até mais sofisticado recurso de Scala que eu sou ainda novo para um detalhe. Comece com o mais fácil, mas lenta, e depois ver se é rápido o suficiente.

A grande coisa ocorre quando suas classes, ou seja, o seu esquema, mudança . Em vez de ALTER'ing suas tabelas, você pode simplesmente alterar a classe, garantir que você faça algo inteligente se há algum documento uma chave que você espera está faltando (porque foi baseado em uma versão mais antiga da classe), e temos que ir. Respondendo a mudança nunca foi tão fácil, e ainda o seu código é como tipagem estática quanto ele pode chegar.

Se isso não é bom o suficiente para você, e você quer nenhum esquema em tudo, então você está dizendo efetivamente que você não quer usar classes para definir e manipular seus dados. Isso é bom também (embora eu não posso imaginar um uso), mas, em seguida, a questão não é sobre a dinâmica vs linguagens estáticas, mas sobre a possibilidade de linguagens OO baseada em classe utilidade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top