【问题标题】:Model View Controller in Qt application developmentQt 应用程序开发中的模型视图控制器
【发布时间】:2016-04-15 08:22:55
【问题描述】:

MVC 模式背后的意义是什么?什么时候推荐在设计应用程序时使用MVC设计模式,什么类型的应用程序?我用Qt半年了,没用过MVC,该不该用?应用程序设计和开发还有哪些其他设计模式?

【问题讨论】:

  • 使用模型视图架构几乎不可能使用 Qt w/o,因为 Qt 有点强迫您这样做。
  • 如果您读过有关 MVC 的书籍或文章,但您不理解或不同意其中的某个特定点,请引用该特定点。否则问题不够具体。

标签: c++ qt model-view-controller


【解决方案1】:

MVC 是更常用的 GUI 应用程序核心设计模式。 和很多架构一样,主要目的是在代码中拆分逻辑和数据,因为它更易于阅读、维护(您会发现很多优点)...

但还有一些更具体的东西。 MVC 标准是使用Observer/Observable 模式,仅在数据更新时刷新视图。不像游戏循环。

关于Qt (>= 4.0),可以看到here,说MVC是框架架构的一部分。所以你已经在使用它了:不要尝试重新实现它,只需像设计时一样使用 Qt 类(参见上面的链接)。

您还可以使用一些 MVC 变体来扩展架构,例如 MVVMPureMVC....

关于其他架构,我喜欢Entity Component System,但它对于小型应用程序来说有点太多了。如果你也想了解更多关于设计模式的一般知识,这个site 是一个很好的(可能有点旧)。

【讨论】:

  • 那么信号和槽是 MVC 的一部分吗?
  • @Lazar 信号和插槽可用于帮助实现 MVC,但它们是独立存在的。只要您考虑使用 Qt 完成 MVC 的特定实现,它们就是 MVC 的“一部分”。
  • 检查我的答案中的链接(关于 Qt MVC),并搜索信号和槽关键字。你会知道你需要的一切。但是是的,Qt MVC 在他们的设计中集成了信号和槽(我并不是说你需要信号和槽来设计你自己的 MVC)。
【解决方案2】:

MVC 是一种用于 GUI 应用程序的模式:它确保您的业务逻辑 - 在 [M] 模型中 - 与您的 GUI 分离 - 在 [V] 视图中。 [C] 控制器确保这两者可以相互通信。

这种解耦的最大优势之一是您的应用程序将保持可维护性。我可以从个人经验告诉你,一个主对话框处理几乎所有事情(数据库访问、用户输入验证等)的应用程序真的很难维护。帮自己一个忙,坚持在您的应用程序中使用干净的架构,因为这将在其生命周期的后期得到回报。

另一个 GUI 应用程序模式是 MVVM,有关应用程序模式主题的更多信息,我强烈推荐 Martin Fowler 的《企业应用程序架构模式》一书。

【讨论】:

    【解决方案3】:

    Qt 在整个 QtGUI 组件中广泛使用它自己的模型/视图模式,这是它对 MVC 模式的解释。

    更多详情请看这里:

    http://doc.qt.io/qt-4.8/modelview.html

    你应该什么时候使用它?理想情况下,只要有可能——尤其是在处理需要表示大量数据的复杂 GUI 组件时。 QTableView 是我最常使用它的地方。

    它为您提供的主要优势很简单,通过松散地耦合您的视图和数据,对其中一个的更改对另一个的影响最小。这使您的代码在未来更易于维护。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-22
      • 2015-07-21
      • 1970-01-01
      • 2013-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多