WEB开发网
开发学院软件开发Java Java 开发 2.0: NoSQL 阅读

Java 开发 2.0: NoSQL

 2010-07-20 00:00:00 来源:WEB开发网   
核心提示: 清单 8. 创建一个参赛者很简单packagecom.b50.nosqlclassRunnerextendsModel{publicRunner(params){super(params)}}看看 清单 8,我感觉自己几乎完成工作了,Java 开发 2.0: NoSQL(9),但是,我还需创建参

清单 8. 创建一个参赛者很简单

 package com.b50.nosql 
 
 class Runner extends Model{ 
 public Runner(params){ 
 super(params) 
 } 
 } 

看看 清单 8,我感觉自己几乎完成工作了。但是,我还需创建参赛者和比赛之间的链接。当然,我将把它建模为一个 “多对多” 关系,因为我希望我的参赛者可以参加多项比赛。

没有架构的域建模

Google App Engine 在 Bigtable 上面的抽象不是一个面向对象的抽象;即,我不能原样存储关系,但可以共享键。因此,为建模多个 Race和多个 Runner之间的关系,我将在每个 Race实例中存储一列 Runner键,并在每个 Runner实例中存储一列 Race键。

我必须对我的键共享机制添加一点逻辑,但是,因为我希望生成的 API 比较自然 —我不想询问一个 Race以获取一列 Runner键,因此我想要一列 Runner。幸运的是,这并不难实现。

在清单 9 中,我已经添加了两个方法到 Race实例。但一个 Runner实例被传递到 addRunner方法时,它的对应 id被添加到底层 entity的 runners属性中驻留的 id的 Collection。如果有一个现成的 runners的 collection,则新的 Runner实例键将添加到它;否则,将创建一个新的 Collection,且这个 Runner的键(实体上的 id属性)将添加到它。

清单 9. 添加并检索参赛者

 def addRunner(runner){ 
 if(this.@entity.runners){ 
 this.@entity.runners << runner.id 
 }else{ 
 this.@entity.runners = [runner.id] 
 } 
 } 
 
 def getRunners(){ 
 return this.@entity.runners.collect { 
 new Runner( this.getEntity(Runner.class.simpleName, it) ) 
 } 
 } 

上一页  4 5 6 7 8 9 10  下一页

Tags:Java 开发 NoSQL

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接