使用 C++ 的 MVC 方法
Posted
技术标签:
【中文标题】使用 C++ 的 MVC 方法【英文标题】:MVC approach with C++ 【发布时间】:2011-10-19 06:53:09 【问题描述】:我一直在学习 php MVC 模式,它非常酷。几乎完成了应用程序,我可以看到如果没有良好的设计,您可以编写出多么混乱的代码。 现在可以将 MCV 应用于 C++ 应用程序吗?如果可能的话,插件管理器/插件会去哪里?在模型或控制器中? 谢谢!
编辑:
我的意思是带有 GUI 工具包的 C++,例如 QT/Wxwidgets/GTK+ 另外请帮助我了解如何在 C++ 中实现。我已经学会了如何在 PHP 中做到这一点,但是你知道这两种语言在某种程度上是不同的!
EDIT2
http://forums.wxwidgets.org/viewtopic.php?f=1&t=30983
【问题讨论】:
【参考方案1】:你如何在 C++ 中实际实现它
让负责渲染的类对应用程序细节一无所知。称它们为 SomethingView 类以明确这一点
让您的域对象对可视化或用户交互一无所知。你不需要称他们为模型,但你可以
创建一组负责运行控制器角色的类:如果可能,通过依赖注入以某种方式将依赖关系连接到视图和模型类。例如:CppInject。在任何情况下,控制器类都可以知道模型和视图类,因此重要的部分是:视图和模型对象之间的所有耦合都与控制器隔离。
另外,这意味着所有命令式编程也应该限制在控制器类中:视图和模型应该是声明式的。这意味着,他们应该提供与其角色相关的服务,但避免与其他对象直接交互作为副作用
你不需要用事件式系统来实现控制器和其他组件之间的通信,虽然这样的系统肯定有帮助,但肯定不是必需的
惊喜!上述内容适用于任何语言或框架,当然除了那些从一开始就已经以某种方式迫使 MVC 进入你的喉咙的语言,即:ruby on rails
【讨论】:
这种方法不是更像MVP模式吗?在 MVC 中,视图和模型相互了解。模型通知视图,视图直接从模型中提取数据以显示。在 MVP 中,如上所述,模型和视图互不了解,由 Presenter 进行耦合。 "惊喜!以上适用于任何语言或框架" 是的,不是的,很多工具包都有一些方法可以做 MVC / MVP 半生不熟,例如在 Qt 小部件中既有视图又有控制器责任。您可以在以 XML 表示的 UI 中聚合小部件,但新小部件也同时具有两种角色(显示和处理用户输入)。【参考方案2】:MVC 是一种设计模式,而不是特定于语言的构造,所以是的,您也可以将它应用于 C++ 应用程序。
MVC 可以而且应该以任何语言应用,因此您的用户界面与后端松散耦合,并且可以在相互影响最小的情况下进行更改。
MVC 模式将对象清晰地分为:
模型用于维护数据, 视图用于显示全部或部分数据,以及 控制器,用于处理影响模型或视图的事件。【讨论】:
你能稍微解释一下模型吗?我会说模型==>数据库查询(获取数据),控制器==>对事件和视图的反应==> GUI 功能吗? @Stefano:看一下答案中的链接,它有一个很好的实际示例(独立于任何语言),这样可以让您更好地理解。【参考方案3】:是的,MVC 可以在 C++ 中应用。例如,MFC 框架使用了本质上是 MVC 的 Document/View 架构。
设计模式不是库或类。这是一个模式。所以你没有用于 C++ 的通用 MVC 库。
【讨论】:
@Stefano:为了在 C++ 中执行 MVC,您需要了解 C++ 并理解 MVC - 仅此而已。所以,学习 C++ 并了解 MVC @Stefano 当然,您需要一个具体的 C++ GUI 库,当然,您也必须了解它。 我对 wxWidgets 有相当深入的了解。事实上,我在我最新的 C++ 项目中使用它【参考方案4】:使用Tree frogs Framework。 TreeFrog Framework 是一个用于开发 Web 应用程序的高速全栈 C++ 框架。
【讨论】:
【参考方案5】:MVC 是一种架构设计模式(即构建软件的一种方式),通常与 Web 应用程序相关联,但它通常适用于任何语言的任何软件项目。您必须对您的项目进行一些抽象工作,并确定哪个软件属于每个部分(即 GUI 可能是 View 的一部分等)。
请注意,这种模式主要是为了分离开发,这样项目的任何部分都可以独立开发。这对于小型独立应用程序可能会很烦人,但对大型项目很有用且有益。
【讨论】:
谢谢!现在剩下的问题是,您如何在 C++ 中实际实现它 ***条目建议了一组围绕 MVC 概念构建的 C++ 的 GUI 或 Web 应用程序框架。但 MVC 实际上是一个模式,而不是一个特定的库,因此您可以随意将其用作创建自己的应用程序的灵感。 不管怎样,如果你在 PHP 中学习过 MVC,你可能会写一些 Web 应用程序,所以我建议你学习其他部分并尝试使用 GUI 编写 C++ 应用程序。 问题是教程。 Iama 正在查看下面由 Als 提供的链接【参考方案6】:就我个人而言,我使用升压状态机来处理逻辑信号和升压信号以将事物连接在一起。
我写了一个小例子,你可以在这里分析: https://github.com/edubois/mvp-player
【讨论】:
您可以通过在此处添加一些代码的 sn-ps 来改进答案吗?以上是关于使用 C++ 的 MVC 方法的主要内容,如果未能解决你的问题,请参考以下文章
寻找使用 ajax 将 MVC 5 视图发布到控制器的正确方法