0

我和一些朋友打算开发一个带有 playframework 和移动应用程序(android 和 iphone)的网站。所以我们需要为移动应用程序(CRUD)制作一些网络服务。所以我们考虑在我们的 playframework 应用程序中使用这个 Web 服务,而不是浪费时间和创建 CRUD anorm(编写所有 sql 请求)。

好吧,我是来征求你的意见的。这是一件好事吗?这里最好的建议方法是什么?

谢谢你。

PS:Web 服务是使用我们数据库中的 Netbeans 自动生成的。

4

1 回答 1

5

我建议反对这种方法的原因有很多。

一般的设计规则是不要向用户公开您的内部数据模型。这条规则有多种形式,其中分层架构可能是最广为人知的一种。

详细会出现以下问题:

  1. 调整性能:这很难实现,因为您对生成的 Web 服务没有或没有太多控制权。当您的应用程序真正采用时,您将受到此限制
  2. 访问服务:我不知道你是生成 RESTful Web 服务还是 WS-* 的。后者在通过 iphone 访问它们时会给您带来麻烦。
  3. 设计 Play 与同步 Web 服务:与性能相关的还有一个问题,即生成的服务可能是同步的、阻塞的,这与 play 框架所采用的非阻塞方法不太匹配。
  4. 抽象级别:因为您的数据库是基于集合的,但您的业务模型可能不是,所以您将在开发一个体面的客户端、调整性能、进行适当的验证、安全性等方面遇到问题。
  5. 身份验证、授权和记帐:很难做到,因为数据库只知道数据库系统用户
  6. 改变:如果你改变你的数据库模型怎么办?生成的服务会继续工作吗?如果您只是添加一列,您是否有采纳他们的事件?
  7. ...

其中一些原因确实重叠,但我认为一般问题应该很清楚。

我会推荐以下方法,而不是这种方法。为您的应用程序开发一个 RESTfull 端点,这并不难。这是客户应该开发的外部合同。例如, play-mini非常需要基于未过滤的 API 来执行此操作。在执行此操作时,请专注于您的应用真正需要的操作。在考虑生产就绪软件时,CRUD 通常是一个糟糕的模型。

如何访问数据库是您必须做出的另一个决定,但可能并不那么重要,因为它不是您的外部合同,因此您可以在需要时更改它。

于 2012-10-08T18:37:02.963 回答