Win32 MVC模式实现

时间:2010-10-27 16:46:30

标签: c++ model-view-controller design-patterns winapi

我正在研究win32应用程序,我想我应该使用MVC模式。现在根据模式,处理用户交互的代码应该在控制器中,以便我可以相应地更新模型和/或视图。 但在Win32中,这是否意味着我的windowProc应该在控制器中?这对我来说有点奇怪,我会创建一个窗口和所有UI的东西,然后在控制器中将wndProc子类化。 另一方面,如果我不这样做,我最终需要视图中的控制器实例,以便我可以处理模型。我很确定这不是可行的方法。

如果有人能指出我正确的方向,那就太棒了!

感谢。

3 个答案:

答案 0 :(得分:3)

处理用户交互的代码是view。控制器用视图“粘合”模型(简单地说)。窗口过程肯定属于GUI,即视图部分。通过此GUI,您将生成控制器将捕获的事件,调用模型并对其进行响应。

答案 1 :(得分:0)

MFC的Document / View模型是对MVC的半生不熟的尝试。如果您正在考虑使用MFC,那么您可以使用CView派生类来表示视图(duh!)和CDocument派生类来表示模型。不幸的是,MFC并没有真正尝试将控制器功能与模型或视图分开。

在SDI Doc / View应用程序中,Windows GUI的事件驱动特性使得将一些控制器功能放入视图中变得非常容易 - 而且MFC中的大部分向导生成的代码都可以做到这一点。 p>

在MDI应用程序中,每个模型有多个视图,显然它们中的任何一个都是控制器是错误的,因此诱惑是将控制器逻辑放入文档类或框架窗口......但它添加一个新类来充当控制器并使用它来包装域逻辑并不困难。尽管如此,将这类课程变成MFC也是一种挣扎,而且大多数人似乎并不打扰。最简单的方法就是将Document作为模型和控制器集于一身。

MFC(尽管存在许多缺点)仍然是用于在C ++中编写仅限Windows的GUI应用程序的最高效框架之一。如果您不关心MFC,或者您需要一个可以支持多个平台的框架,那么您可能已经拥有更好的MVC支持 - 例如,请参阅this article在Qt中支持MVC。

答案 2 :(得分:0)

问题可能是你的抽象程度。

假设您拥有相同的数据模型,以及如何修改它的控件,并且您希望将整个界面从win32更改为HTML。整个接口位是视图。

现在,您甚至可能拥有多个模型和控制器,例如域数据,以及当前应用程序的查看方式。

控制器通常需要存在于视图特定部分的生命周期之外。