繁体   English   中英

如何使用不可变对象替换观察者模式

[英]How to use immutable objects to replace observer pattern

宣布Oo时,我感到很高兴但事实证明,它不再属于木制品了 建议的替换库之一在其github页面上对此进行了解释,如下所示:

Web开发朝着功能编程和不可变对象的方向发展,因此这是我们所有人都应该关注的地方。

尽管最近我听说过不可变的数据结构,但我仍然不知道如何使用它们来代替观察者模式的功能。

不变的数据结构并不能完全取代观察者模式的功能,它们只是使其变得多余。 不可变性只是表示“无法更改”,因此观察者模式会告诉您对象何时更改,使用不可变对象意味着它们将永远无法更改(如果您确实需要添加或删除值,那么您将创建一个新的不可变对象对象),因此您无需担心处理更改事件。 您可以使用Immutable.js来获取不可变的Map或List或Stacks或其他复杂的数据结构(并且您可能希望在该页面上阅读不可变的案例 )。 或者,您可以使用普通的javascript(ES5.1中引入的Object.freeze函数)使对象文字不可变:

var o = { a: 99 };
Object.freeze(o); // make o immutable
o.a = 100; // a still equals 99, this assignment silently fails because o is immutable

我认为您误解了这一信息。

不变的数据和观察者(反应式编程)是很好的结合。 仅仅是Object.observe变得多余-如果Object不变,那么您在这里到底要observe什么?

链接到的库是针对(尚未)支持Object.observe的ECMA标准的浏览器的兼容性补丁。 由于标准撤回了接口,因此该接口不再有效。 这并不意味着某人不能将其保留为库,而只是意味着它不再是一个兼容性补丁。 这就是评论的意思,IMO。

在Javascript框架中进行更改及其检测是关于该主题的不错的阅读。 最后一点,Om基本上讨论了对不可变数据的反应方法,其中有很多链接需要进一步研究。 当然,我仍然建议您阅读整篇文章-它很好地概述了状态更改方法多年来的变化,因此,为您提供了所需的详细信息-新方法解决了旧方法存在的问题( 50岁:P)范式。 请注意,只有状态本身是不可变的-您可以很好地切换状态,这就是您要观察的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM