在具有 Web 服务和 SOAP 的客户端/服务器应用程序中使用惰性属性

Using lazy properties in a client / server application with webservices and SOAP

我们有一个巨大的客户端/服务器应用程序。服务器公开多个 Web 服务,其中大部分服务检索/填充复杂业务模型的不同部分。

目前没有惰性功能,因此每次发出请求时都会检索并返回完整模型,即使客户端只需要一个 属性 值。

例如,考虑下一个模型图:

然后我们有一个服务可以根据不同的标准获取模型:

数十个客户使用这些方法,但每个客户都需要填充模型的不同部分。由于我们没有延迟加载功能,因此即使客户端可能只需要一个 属性 值,我们也会在每次调用时检索完整模型。这增加了服务器从数据库查询信息所需的时间以及序列化/反序列化对象所需的时间。

在服务器中,我们使用的是 Hibernate,但由于缺少客户端上的功能,所以一切都很急切。

我们如何通过 SOAP 网络服务实现此机制?有没有已经可用的东西?

我会看重几个选项

  1. 延迟加载:修改hibernate层,每次请求只加载你需要的对象。

  2. Filter SOAP objects: 每个服务returns只需要客户端清理整个模型不需要的对象和属性的信息。

第一个选项将通过提高服务器性能(减少查询)和避免序列化不必要的对象来缩短响应时间,但它需要重新实现服务器数据库层和使用它的服务

第二个选项只最小化序列化和反序列化时间,以及网络传输时间,但实现非常本地化,允许您维护实现甚至在将来重新设计服务器(例如实现选项 1)而无需更改界面。

第一个选项似乎最合乎逻辑,但您必须考虑服务器上可能具有的其他受影响的服务以及重新实现时间。