c# - 关于经典 MVC 的问题

标签 c# objective-c design-patterns smalltalk

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

谢谢

最佳答案

要解决有关 Smalltalk(MVC 的起源)如何处理这个问题的子问题:最初(这是 Smalltalk-80,Trygve Reenskaug 实现 MVC 的地方)确实有必要为您的特定 View 注册 View 父类(super class)的子类它作为订阅者从具体模型子类更改事件。 Smalltalk 中的 Controller 只是将窗口事件(尤其是键盘和鼠标)委托(delegate)或分派(dispatch)给模型。基本上你可以说 Controller 修改了模型对象,而 View 只显示了它们。 然而,动态值的概念,或后来被称为 ValueModels 的概念,使这种方法在 VisualWorks Smalltalk 中过时了。现在您可以创建一个标准的 GUI 框架,不再需要子类化,并且每个 View 都可以将自己注册为抽象模型类的观察者。 View 的模型将不再是模型类,而是具有标准接口(interface)的值模型。更多相关信息:http://st-www.cs.illinois.edu/users/brant/papers/ValueModel/ValueModels.htm

关于c# - 关于经典 MVC 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2740527/

相关文章:

iphone - UISegmentedControl 不更新 View

java - 在装饰器对象上调用非装饰方法

c# - 了解 C# 中的装饰器设计模式

c# - 在方法中途添加泛型类型约束

ios - 按下锁定按钮的 View Controller 方法?

iphone - 需要帮助理解 iOS/Objective-C 编程中的特定分配/发布习惯用法

面向对象设计 : Car - Connection between Tank and Engine

c# - 使用 ADPlus 调试消失的 .NET 应用程序,获取 CONTRL_C_OR_Debug_Break 异常

c# - VS中有类似大纲 View 的东西吗?

c# - 如何计算多边形的圆角?