关于经典MVC的问题

时间:2010-04-29 20:22:25

标签: c# objective-c design-patterns smalltalk

在经典MVC中,模型会通知视图有关其所做的更改。在C#中,这意味着我必须将我感兴趣的View和子类class寄存器子类化为模型的事件。例如, 如果我使用C#和Winforms实现MVC,我必须继承TextBox类,然后在MyTextBox的构造函数中注册模型事件。我对么? 这是如何在Smalltalk发布的?是否还需要为每个View创建子类以注册模型的事件,或者是否有某种方法可以动态地将事件添加到视图中?

由于

2 个答案:

答案 0 :(得分: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 :(得分:0)

我认为MVP模式更适合您的winforms UI应用程序。

What are MVP and MVC and what is the difference?