关于经典MVC的问题

5
在传统的MVC模式中,模型会通知视图其所做的更改。在C#中,这意味着我必须对我感兴趣的视图进行子类化,并在子类化的类中注册模型的事件。例如,如果我要使用C#和Winforms实现MVC,则必须对TextBox类进行子类化,然后在MyTextBox的构造函数中注册模型事件。我的理解正确吗?
那么,在Smalltalk中如何处理这个问题?是否也需要对每个视图进行子类化以注册模型的事件,还是有一些方法可以动态地向视图添加事件?
谢谢。
2个回答

1

针对关于Smalltalk(MVC的起源)如何处理这个问题的子问题:最初(这是Smalltalk-80,Trygve Reenskaug实现MVC的地方),需要为特定视图子类化视图超类,以将其注册为从一个具体模型子类接收更改事件的订阅者。

Smalltalk中的控制器仅用于将窗口事件(尤其是键盘和鼠标事件)委派或分配到模型。基本上,您可以说控制器修改了模型对象,而视图只显示了它们。

然而,动态值或称为ValueModels的概念使得这种方法在VisualWorks Smalltalk中已经过时。现在,您可以创建一个标准的GUI框架,无需再进行子类化,每个视图都能够将自己注册为抽象模型类的观察者。

视图的模型不再是模型类,而是带有标准接口的值模型。更多信息请参见此处:http://st-www.cs.illinois.edu/users/brant/papers/ValueModel/ValueModels.htm


不错 (+1) 话虽如此,阿黛尔没有写这本书只有《MVC编程的黑魔法》来解释事情……控制器总是会被视图和模型特定信息污染,这就是导致VisualWorks变化的原因——也是其他新模式(如MVP即Model-View-Presenter)的原因之一。 - Mark Mullin

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接