0

启动一个新的 GWT 应用程序并想知道我是否可以从某人的经验中获得一些建议。

我需要通过 RPC 服务获得大量服务器端功能……但我想知道在哪里划清界限。

我可以为每个小调用提供服务,或者我可以提供更少的服务来处理更多的操作。

假设我有客户、供应商和管理服务。我可以为每个类别中的每个功能制作 3 项服务或一项服务。

我注意到许多服务实现不提供编译时帮助,有时很难上手,但它提供了良好的模块化。当我有一个更大的服务时,我没有我所描述的模块化,但我不必解决服务创建问题并减少我的 web.xml 文件中的条目。

使用大量服务是否存在资源问题?确定使用何种粒度级别的最佳实践是什么?

4

3 回答 3

1

在我看来,你应该为“合乎逻辑”的事情提供 rpc 服务。在你的例子中:

一个给客户,另一个给供应商,第三个给管理员

这样,您可以按含义对多个服务进行分组,并且您将在 web.xml 文件中维护几行代码(这是一个好消息 :-)

更严重的是,rpc 服务通常是调用数据库内容的包装器,因此,您甚至可以使用单个 web.xml 条目和数千个操作创建单个“MagicBlackBoxRpc”!

但是像你建议的那样,为管理操作制作一个单独的 rpc 似乎是一件好事。

于 2012-05-09T08:58:05.950 回答
1

阅读关于“一个班级应该有多大?”的一般建议,这可以在任何体面的软件工程书籍中找到。

在我看来:

一类 = 一个主题(即相关的一组功能或行为)

一个课程不应该处理一个以上的主题。例如:

类 PersonDao -> 主题:数据库和 Java 代码之间的接口。

它不会: - 缓存 Person 实例 - 自动更新字段(例如,更新字段“lastModified”) - 查找数据库

为什么?

因为对于所有这些其他事情,会有其他课程在做!分别: - PersonDao 周围的缓存与信息的有效存储有关,以避免不必要地频繁访问 DB - 使用 DAO 的 Service 类负责修改需要自动修改的任何内容。- 查找数据库是 DataSource 的责任(通常是 Spring 等框架的一部分),您的 Dao 不应该担心这一点。这不是它的主题的一部分。

TDD 就是答案

当您进行 TDD(测试驱动开发)时,对这种分离的需求变得非常清楚。尝试对单个类执行各种操作的不良代码进行 TDD!你甚至不能从一个单元测试开始!所以这是我最后的提示:使用 TDD,它会告诉你一个类应该有多大。

于 2012-05-09T08:59:53.877 回答
0

我认为要优化的是你可以在服务器的一次往返中完成一个结果。我在我的服务对象上有一个特别的方法集合,用于客户端在必须完成某事时发现自己所处的每种情况。当用户坐在那里等待时,您不希望客户端连续多次 RPC 到服务器。

REST 使事物正交,但正交性是有代价的:语言中经常使用的动词是不规则的,这是有原因的。在为您的应用程序维护干净的正交结构方面,请确保您的架构设计良好。这就是每个类应该具有与其他类的语义正交的语义。当每个 RPC 调用的语义可以在模式中清晰地表述时,就不会混淆它们的含义,即使它们不是 REST 完全理想的。

于 2012-05-19T09:01:28.410 回答