我目前正在学习web服务,如果我正确理解RPC的示例,就会基于WSDL生成存根,存根会将方法、数据等转换为远程进程可以使用的形式(整个编组和解编组的事情,我想我已经掌握了要点(。我认为生成存根的很大一部分原因也是为了让整个东西在不同的地址空间和操作系统中发挥作用。如果我错了,请纠正我。
我的主要问题是:有没有不生成存根的替代方案?如果有,它们如何弥合本地系统和远程系统之间的差距?
您有两种主要的通信设计方法-先约定或后约定。
在您的示例中,您首先执行契约-编写WSDL,然后从中生成代码。这种方法的好处是解耦开发过程-双方(服务器和客户端(都可以基于契约进行开发。
最后一个约定是在代码中定义api,然后框架根据这些方法生成WSDL。可以说,这比规模小得多的团队更快,因为他们可以在第一次公开发布之前随时更改api。
至于:不生成存根的替代方案,如果是,它们如何弥合本地系统和远程系统之间的差距——我建议有一个专用的通信层,它抽象了实际的在线通信。
例如,假设一个远程系统有两个api——getNameById和getEmailById。您的业务案例需要名称和电子邮件,因此您将拥有一个带有api的数据访问层-getNameAndEmailById。在这种情况下,出于测试目的,您将截断此数据访问层。但是,对远程服务使用stubs/mmock并没有本质上的错误。