Oop MVC/观察员和;不变的数据结构
您能解释一下MVC/Observer技术在两种情况下的相似之处吗:Oop MVC/观察员和;不变的数据结构,oop,model-view-controller,design-patterns,functional-programming,immutability,Oop,Model View Controller,Design Patterns,Functional Programming,Immutability,您能解释一下MVC/Observer技术在两种情况下的相似之处吗: 不可变对象(OOP样式) 不可变数据(函数样式) 例如,让我们考虑下面的简单GUI示例(您可以尝试在这里直播,点击“Run”按钮启动它,等待2秒的文本出现) 它是用JavaScript构建的,因为它很容易玩,而且MVC/Observer对它来说非常自然 // Model containing the data. var Post = Backbone.Model.extend({}) var PostView = Backb
例如,让我们考虑下面的简单GUI示例(您可以尝试在这里直播,点击“Run”按钮启动它,等待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"})
但是我不太明白如何对不可变OOP和函数样式执行相同的操作,有哪些方法?关于不可变OOP样式,我建议应用以下修改:不是“更改模型状态”,而是每次状态更改时都必须创建一个新的模型状态。我将把不可变状态作为参数传递给观察函数(这里是
render
函数),而不是在视图中拉取观察函数中的状态
作为对观察者设计模式的更具功能性的方法的灵感,您可能想看看反应式函数编程。特别是,我会推荐这篇有点争议的论文。对于经典的MVC和OOP技术,每个对象都有一个隐式标识符——它的引用。观察者依靠此引用/标识符将消息分派到正确的对象 在不可变世界中,引用不再标识对象(对象的不同版本可能有多个引用),而在函数世界中,根本并没有对象。因此,我们需要显式地提供对象标识 不可变/函数世界中的观察者类似于具有显式提供的对象ID的发布/订阅