2010-04-29 73 views
5

在经典的MVC中,模型会通知有关对其进行更改的视图。在C#中,这意味着我必须将我感兴趣的视图和子类注册类继承到模型的事件。例如, 如果我要使用C#和Winforms实现MVC,则必须继承TextBox类,然后在MyTextBox的构造函数中注册模型事件。我对么? 这是如何在Smalltalk中发布的?是否还需要对每个视图进行子类化以注册模型的事件,还是有一些方法可以动态地将事件添加到视图中?关于经典MVC的问题

谢谢

回答

1

为了解决有关的Smalltalk(从MVC起源)如何处理这个子问题:原来(这是Smalltalk的-80,其中特里夫·林斯卡格实现MVC),的确是需要继承的观点超为了您的特定视图,将其注册为订阅者,以便从具体模型子类中更改事件。 Smalltalk中的控制器只是委托或派发窗口事件(特别是键盘和鼠标)到模型中。基本上你可以说控制器修改了模型对象,而视图只显示它们。 然而,动态值或ValueModels的概念,因为它们变得被调用,使得这种方法在VisualWorks Smalltalk中过时。现在你可以创建一个标准的GUI框架,不再需要子类,每个视图都可以注册为一个抽象模型类的观察者。 视图的模型不再是模型类,而是具有标准接口的值模型。更多关于这里:http://st-www.cs.illinois.edu/users/brant/papers/ValueModel/ValueModels.htm

+0

不错(+1)这就是说,阿黛尔从来没有写过这本书,只有'MVC编程的黑色艺术'来放置东西的原因....控制器总是受到视图和模型特定信息的污染,这导致了视觉工作的变化 - 还有一些其他更新的模式,如MVP(Model-View-Presenter) – 2010-09-01 11:39:52