MFC 中的文档/视图架构基本上是模型/视图/控制器模式但没有控制器吗?

Posted

技术标签:

【中文标题】MFC 中的文档/视图架构基本上是模型/视图/控制器模式但没有控制器吗?【英文标题】:Is document/view architecture in MFC basically a Model/View/Controller pattern but without the controller? 【发布时间】:2015-12-31 08:12:09 【问题描述】:

MFC 中的文档/视图架构真的是没有控制器部分的模型/视图/控制器模式吗?

我正在学习 MFC,我非常喜欢它。我知道它有点过时并且有点难以使用,但我发现与 QT 相比,它给了我更多的功能和性能提升。

将 MFC 文档/视图模型视为没有控制器部分的简单 MVC 是否正确?

【问题讨论】:

原始的“MVC”模式已被现代(任何架构。它不再是一个有用的术语,就像“面向对象”或“敏捷”一样。模式的一个目的是给一个具体的想法一个简洁的名称。 “MVC”不再满足这个要求。 @ChristianHackl 优秀的评论。谢谢。 +1 我投票结束这个问题,因为它不适合***。它应该被迁移到programmers。 【参考方案1】:

Model/View/Controler 具有以下组件:

型号 视图:负责向用户展示模型 控制器:负责获取用户输入并将其转换为模型操作

MFC 的Document/View 只有两个组件:

文档,实际上是我们的模型 视图,负责显示文档和interpret the user's commands。所以它是视图+控制器(参考this MSDN article中的Variants部分)

【讨论】:

嗨,谢谢。所以基本上在 Document/View 模式中,View 既充当视图又充当控制器,对吗?【参考方案2】:

我们来看看:

视图包含 UI 代码,用于呈现数据和获取用户输入。 文档包含序列化代码。

从这个角度来看,UI 和后端之间只是分开的。但是,还有更多,因为您可以在同一个文档上拥有多个不同的视图。您还可以使用该文档来提供数据存储并将任何实际的程序逻辑放入视图中。特别是当您只有效地使用每个文档的单个视图时,在实践中很容易模糊分离。

总之,我不会说缺少 MVC 控制器部分,而是说它已与 MVC 视图部分合并到 MFC 视图中。

【讨论】:

嗨,谢谢。从您的回复中,我了解到 Document/View 不如 MVC,因为您可以在 View 中拥有实际的逻辑,对吗? 一个糟糕的程序员可以用任何语言和任何框架做愚蠢的事情。 是的,当然,但是回到我的问题,我是否正确地说从您的 OR 收集信息,您看到的文档/视图模式不如 MVC,因为可以在视图中包含逻辑部分? 没有。我什至不知道将任何一种方法称为“劣于”另一种方法的标准是什么。在实践中,程序越大,具有清晰的可维护性结构就越重要。同样,程序越小,由不必要的结构引起的开销就越大。 @Thereisnothingwecando:你试图把这个问题简化得太方式了。为给定问题设计正确的软件架构比查看程序的“大小”(您如何衡量“大小”?)然后查找正确的模式更难。

以上是关于MFC 中的文档/视图架构基本上是模型/视图/控制器模式但没有控制器吗?的主要内容,如果未能解决你的问题,请参考以下文章

没有文档/视图架构的 MFC

保护文档架构中的模型(Cocoa/Swift)

如何在 MFC 应用程序首次启动时禁用自动文档/视图创建

在文档/视图 MFC c++ 中没有视图的文档

MFC 中的非动态 Doc/View 架构使用

MDI 应用程序 MFC 中文档的多个视图