计算对象增量

我正在开发一个客户端和服务器共享对象模型的应用程序,对象图可能变得相当大。

要将对象从客户端保存到服务器,理想情况下我只希望通过线路发送差异,以最大限度地减少网络流量。 我可以在服务器上提取原始对象图并将delta应用于它

想知道是否有任何工具或项目,或者是否有任何人有过做这样的事情的经验..

非常感谢

在以前的工作中,我们有大型三维模型,我们希望在客户之间共享。 鉴于模型大小和带宽限制,要保存实际模型更改是不可能的。

我们选择序列化数据操作 ,而不是发送整个更改的模型。 例如,操作可能是{CUT plane:(pt1,pt2,pt3)}或{DRILLHOLE(point,radius,depth)}。 这对我们的应用程序非常有用,但它可能不适合您的模型。

此外,马修建议计算哈希值或时间戳是一个很好的建议。 此外,也许您可​​以保留唯一键的哈希表,以便服务器知道删除了哪些以及添加了哪些。

您可以通过让对象根据其属性值计算自己的哈希值来节省一些带宽。 将服务器对象哈希值与客户端对象哈希值进行比较,如果它们不同,则更新相应的哈希值。

我正在计划我的第一个N层架构,并在我即将发布类似的问题时遇到了这个问题。 到目前为止,我看到的所有示例代码每次都通过线路传递整个对象图,而不考虑实际进行了哪些更改。 我一直在考虑采用上述方法。 虽然,它似乎是少走过的路。

我喜欢传回每个修改过的属性的增量的想法。 对于集合属性,这将是添加和删除的内容。 对于单值属性,它可能只是新值。 我可以以一般方式实现这一点,使得这些增量的累积对于所有域对象都是透明的。 并且将以一般forms通过线路发送增量,而不使用特定于我的域模型的DTO类。

这让我想知道我是否也无法通过使用相同的通用增量数据结构在服务器到客户端的方向上进行通信。 毕竟,你可以有一个基本上填充空对象的delta。 然后我可以完全消除硬编码的DTO类。 我用谷歌搜索“通用DTO”(没有引号),发现了这个和这个 。 看起来其他人已经在实践中应用了这个想法。