我很高兴when O.o was announced但结果却是not in the woodwork anymore。其中一个建议的replacement libraries在其github页面上解释了它:
Web开发是朝着函数式编程和不可变对象的方向发展的,所以我们都应该关注它。
虽然我最近听说过不可变数据结构,但我仍然不知道我应该如何使用它们来取代观察者模式的功能。
答案 0 :(得分:1)
不可变数据结构并不完全取代观察者模式的功能,它们只是使它变得多余。不变性只是意味着“无法改变”,因此观察者模式告诉您对象何时发生变化,使用不可变对象意味着它们永远无法改变(如果您确实需要添加或删除值,那么您将创建一个新的不可变的对象),所以你不必担心处理更改事件了。您可以使用Immutable.js来获取不可变的地图或列表或堆栈或其他复杂的数据结构(您可能希望在该页面上阅读不可变性的案例)。或者你可以使用普通的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
答案 1 :(得分:1)
我认为你误解了这个消息。
不可变数据和观察者(反应式编程)是一个很好的配对。只是Object.observe
特别容易变得多余 - 如果Object
没有变化,你究竟想要observe
在这里做什么?
您链接的库是针对不支持Object.observe
的ECMA标准的浏览器的兼容性修补程序。由于标准撤回了界面,因此不再有效。这并不意味着某人无法将其保留为库 - 这只是意味着它不再是兼容性补丁。这就是评论所指的那一切,IMO。
Change and its detection in Javascript frameworks对这个主题的阅读非常好。最后一点,Om,基本上讨论了对不可变数据的反应式方法,并提供了大量深入研究的链接。当然,我仍然建议阅读整篇文章 - 它很好地概述了状态变化方法多年来如何变化,因此,为您提供了您想要的详细信息 - 新方法解决的旧方法存在哪些问题( 50岁:P)范式。请注意,只有状态本身是不可变的 - 你可以很好地切换状态,这是你正在观察的事情。