【问题标题】:Object ownership in C++ (MVC pattern)C++ 中的对象所有权(MVC 模式)
【发布时间】:2017-07-18 14:31:51
【问题描述】:

我非常了解 MVC 模式,但在 C++ 中实际实现的信息量却少得惊人。对于这个应用程序,我使用的是wxWidgetsboost::depedency_injection,但情况应该是通用的。

在 C++ 11/14 中,我们对对象所有权有严格的规定:对象要么在所有者之间共享,要么对一个所有者唯一。我们也有旧式指针指向非被调用者拥有的对象。

那么,问题是:谁拥有 C++ 中 MVC 中的哪个对象(模型/视图/控制器)?

我现在的猜测:

Views 拥有controllers,由boost:di 作为unqiue_ptr 注入。 Controllersviews 所有,并且以任何形式存储状态(仅在 models 目录上执行的过程)。 Models 本身通过将它们注入为shared_ptr 在所有controllers 之间共享,并用于存储结果并为controllers 操作提供数据

它适合 MVC 吗?

【问题讨论】:

  • 为什么要投票关闭?
  • 嗯,存在如此多的 MVC 变体,很难回答。但是不,控制器不属于视图,应该相反,因为控制器是视图和模型之间的功能桥梁。模型附加到视图,因此视图可以拥有模型。这可能会帮助你stackoverflow.com/questions/6929957/mvc-approach-with-c
  • @Jean-BaptisteYunès 我已经阅读了那个问题和答案,但这只是 MVC 的一个理论。我问的是具体实施问题
  • 那你应该明白了,通常控制器不会被注入到视图中……视图和模型被注入到控制器中,模型被注入到视图中。注入可以是动态的,也可以是静态的,在这种情况下,所有权的性质可能会有所不同......请告诉我们您尝试做的事情,我们可能会更准确地回答。更一般地说,我怀疑视图/控制器所有权应仅限于限制性所有权,因为视图可能由多个控制器控制。
  • @Jean-BaptisteYunès 那么,如果我需要打开新视图,是不是控制器在这样做?应用程序的启动应该如何工作 - 我应该有startup controller 打开默认视图吗? MDI 视图怎么样 -> 我应该将它们视为单一视图,还是应该基于 MDI 子视图?你能写出你的 cmets 作为答案吗?

标签: c++ model-view-controller dependency-injection ownership


【解决方案1】:

嗯,存在如此多的 MVC 变体,很难回答。但是不,控制器不属于视图,应该相反,因为控制器是视图和模型之间的功能桥梁。模型附加到视图,因此视图可以拥有模型。

检查first C++ examplesecond C++ example。第一个是“静态”所有权,而第二个所有权是不稳定的。

【讨论】:

  • 以这种方式动态创建控制器的正确方法是什么?
猜你喜欢
  • 2011-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
  • 1970-01-01
  • 2023-03-16
相关资源
最近更新 更多