有没有一种聪明的方法来记录对 F# 中的对象所做的更改?
我一直在研究 F# 作为构建通过网络复制自身的对象模型的一种方式。我需要解决的一项任务是如何检测对对象所做的更改,以便我只能将更改发送给客户端
注:我在寻找答案,其他不是“执行INotifyPropertyChanged”或“做一些事情,可以很容易地在C#来完成”。如果这是在 F# 中解决问题的唯一方法,那么 F# 不是我正在寻找的工具。
为什么是 F#?因为我对在 C# 中实现这种状态观察者模式的方式并不满意。因此,我正在研究是否有一些优雅的方式以动态语言实现它,从 F# 开始。
您可以使类不可变(例如,使用记录和联合等标准不可变类型,或使对象仅包含不可变内容),而不是在发生更改时检测和通知更改。然后,您可以编写一个函数来“区分”一个类的两个实例,并让一些代理按计划或基于某个触发器查找更改并将差异发送到另一端。
因为数据是不可变的,代理只需要保留一个指向它上次发送的版本的指针。diffing 函数本身可以为每个类手动编写,这将允许考虑数据属性的有效实现,或者您可以使用反射编写通用函数。