gpt4 book ai didi

oop - MVC/观察者和不可变数据结构

转载 作者:行者123 更新时间:2023-12-04 19:39:23 24 4
gpt4 key购买 nike

您能否解释一下两种情况下 MVC/Observer 技术的类似物:

  1. 不可变对象(immutable对象)(OOP 风格)
  2. 不可变数据(函数式)

例如,让我们考虑以下简单的 GUI 示例(您可以在此处现场试用 http://tinkerbin.com/0XDHRXIl 单击“运行”按钮启动它并等待 2 秒以显示文本)

它是用 JavaScript 构建的,因为它很容易玩,而且 MVC/Observer 对它来说非常自然

// Model containing the data.
var Post = Backbone.Model.extend({})

var PostView = Backbone.View.extend({
initialize: function() {
// Registering view rendering method as
// an observer on the model.
this.model.on('all', this.render.bind(this))
},
// Every time state of model changes
// this method will be called.
render: function() {
// Printing value of model.text attriubute.
this.$el.html(this.model.get('text'))
return this
}
})

// Now, any time the model is updated the view will be also
// automatically updated.
post.set({text: "hello, it's me"})

但我不太明白如何使用 Immutable OOP 和 Functional 样式做同样的事情,有什么方法?

最佳答案

在经典 MVC 和 OOP 技术的情况下,每个对象都有隐式标识符 - 它的引用。观察者依赖于此引用/标识符将消息分派(dispatch)给正确的对象。

在不可变世界中,引用不再标识对象(不同版本的对象可能有多个引用),而在功能世界中根本没有对象。因此,我们需要明确提供对象标识。

Observer 在不可变/功能世界中的模拟是一个具有明确提供的对象 ID 的 Pub/Sub。

关于oop - MVC/观察者和不可变数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13155626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com