如果不使用存根,Web service/distributed 系统的替代方案是什么?

What's the alternative for a web service/distributed system if it is not using a stub?

我目前正在学习 web 服务,如果我理解正确的话,作为一个 RPC 的例子,一个存根是基于 WSDL 生成的,存根将方法、数据等转换成远程进程可以使用的形式可以使用(整个编组和解组的事情,我想我明白了它的要点)。我认为生成存根的很大一部分原因也是为了使整个事物能够跨不同的地址空间和操作系统运行。如果我错了,请纠正我。

我的主要问题:是否有不生成存根的替代方案?如果有,它们如何弥合本地系统和远程系统之间的差距?

您有两种主要的设计沟通方式 - 先合同或后合同。

在您的示例中,您首先执行合同 - 您编写 WSDL,然后从中生成代码。这种方法的好处是将开发过程解耦 - 双方(服务器和客户端)都可以根据合同进行开发。

合同最后是在代码中定义 apis,然后框架从这些方法生成 WSDL。可以说,这比小团队要快得多,因为他们可以在第一个 public 发布之前随时更改 apis。

至于:不生成存根的替代方案,如果是,它们如何弥合本地系统和远程系统之间的差距——我建议有一个专用的通信层,它抽象了实际的 on-wire 通讯.

例如,假设远程系统有两个 api - getNameById 和 getEmailById。您的业​​务案例需要姓名和电子邮件,因此您将拥有一个带有 api - getNameAndEmailById 的数据访问层。在那种情况下,您将存根此数据访问层以用于测试目的。但是将 stubs/mocks 用于远程服务本身并没有错。