2011-01-05 56 views
0

我一直在尝试构建一个使用noSQL数据库运行的服务器端API。我对应用程序体系结构很陌生,因此我想就如何尝试分离图层提供一些反馈。我认为引发我的一个主要部分是使用noSQL数据库,它消除了必须预先定义数据模型的约束,同时要求数据的非规范化例程以确保数据可以快速查询。4层应用程序体系结构 - 使用noSQL的服务器端API

我使用的是4层:

  • 数据层

    • 接受键入对象
    • 提供从关键
    • 对象提供对象的列表从查询
    • 提供密钥列表中的对象列表
    • 接受键控对象
    • 从关键
    • 器具非规范化基于模型多次定义(程序删除对象名单,一些对象的部分是拷贝给他人,以加快查询速度,因为连接是不可能的与NOSQL)
  • 业务层

    • 提供业务逻辑
    • 强制执行权限
  • 模型层

    • 定义已知对象
    • Definies非正规化(什么对象的部分被复制到其他部分)
    • Definies权限(哪些用户可以在什么情况下访问什么对象)
  • 表示层(RESTful的API)

    • 提供宁静API为所有资源/服务,包括
      • 访问并修改对象
      • 置备新的用户帐户
      • 登录到帐户
      • API需要做的其他事情

我对如何我有这个成立了几个问题:

1)我认为,信息定义非规范化(如何以及何时一些ojects的副本中的其他对象提供)被模型定义的一部分,所以我有在模型中提供这些信息的例程。然而,实际上要做到这一点的层是数据层,特别是当信息被保存时,所以我把实现模型中的非规范化定义的例程放在数据层中。它是否正确?2)同样,我也有模型中的权限(谁可以访问什么信息以及在什么情况下)的定义。但业务层将负责将此信息传递给REST API,因此这是我强制执行权限的层。我没有数据层强制执行权限,因为虽然有些用户可能无法直接访问某些数据,但可以通过用户执行的其他操作间接修改该数据(例如,更新该用户的“last_login_time”属性的简单日志记录尽管用户永远无法修改该信息)这是正确的吗?

3)这里还有什么我不正确的,一般来说我应该注意什么或者我应该知道的其他东西?

4)我正在使用谷歌应用程序引擎,这是Java低级API的python。有一个我应该使用的框架已经处理了一些,特别是反规范化和权限?

谢谢!

回答

4

不知道数据有多复杂,为什么数据层与模型分离?我倾向于为我的Google App Engine模型添加功能,以执行他们需要的任何操作,以便从业务层接收数据并将数据获取到该业务层。

另外,你为什么计划使用低级别的API而不是持久性助手使持久性像摔倒一样容易?

我认为您应该先回两步,定义您尝试解决的问题,并查看Google App Engine内置的解决方案。在告诉你如何去做之前,我需要关于你想要完成的事情的信息。

相关问题