gpt4 book ai didi

model-view-controller - 为什么 Qt 滥用模型/ View 术语?

转载 作者:行者123 更新时间:2023-12-03 04:48:35 25 4
gpt4 key购买 nike

我认为 Qt 中使用的带有模型/ View 控件的术语是有缺陷的。在 their explanation page他们声明,他们通过合并 View 和 Controller 将 MVC 简化为 MV,他们给出了以下图片:

picture explaining Qt MVC

然而我认为,他们错误地命名了对象的角色,我认为,

  • 他们所说的带有合并 Controller 的 View 实际上只是一个 View 。
  • 他们所谓的模型实际上只是 Controller 。
  • 如果你真的想要一个模型,它会在他们的“数据”所在的地方。

  • 我说的是您在应用程序中使用 Qt 模型/ View 组件的通常和理智的方式。
    原因如下:
  • 这通常是 Qt 组件,按原样使用,不添加任何特定于您的对象的 Controller 逻辑)
  • 这几乎不是一个模型,只是因为您应该实现几个 Qt 方法,例如 rowCount、columnCount、data 等,这些方法与您的模型无关。事实上,在 Controller 中有典型的模型方法。当然,你可以同时实现 Controller 模型逻辑在这里,但首先它会是非常糟糕的代码设计,其次你会合并 Controller 和模型而不是 Controller 和 View ,因为它们状态。
  • 正如原因2中所说,如果你想分离模型逻辑,它肯定不是图片上的蓝色框,而是虚线“数据”框(当然是与真实数据通信)。

  • Qt的术语是错误的,还是只有我不明白? (顺便说一句:这不是学术问题的原因是我已经开始按照他们的命名对我的项目进行编码,我很快发现,代码显然是不对的。直到之后我才意识到,我应该不要尝试将模型逻辑放在他们所谓的模型中)

    最佳答案

    我同意你的看法,Qt 的命名具有误导性。然而,在我看来,问题不只是 Qt 的问题,而是所有允许我们遵守 separation of concerns 原则的框架都存在的问题。在实现我们的 UI 时。当有人提出这样的框架,并找到一种将“事物”分开的好方法时,他们总是觉得有必要拥有他们称之为“模型”的模块和他们称之为“ View ”的其他模块。多年来,我一直在使用这些框架:

  • MFC
  • Qt
  • 秋千
  • SWT
  • 带有 MVVM 的 WPF

  • 如果您比较术语“模型”和“ View ”在这些框架中的使用方式,以及“ View ”、“模型”和“ Controller ”(如果有的话)中的类所具有的职责,您将发现有很大的不同。对不同的概念和术语进行比较肯定会很有用,这样人们从一个框架切换到另一个框架就有机会保持理智,但这需要大量的工作和研究。值得一读的是 Martin Fowler 的 overview .

    既然 MVC 模式的外观有很多不同的想法,那么哪个是正确的?在我看来,当我们想知道它应该如何“正确”实现时,应该求助于发明 MVC 的人。在 original smalltalk paper它说:

    The view manages the graphical and/or textual output to the portion of the bitmapped display that is allocated to its application. The controller interprets the mouse and keyboard inputs from the user, commanding the model and/or the view to change as appropriate. Finally, the model manages the behavior and data of the application domain, responds to requests for information about its state (usually from the view), and responds to instructions to change state (usually from the controller).



    有鉴于此,我将回答您的三个主要问题:
  • 事实上,Qt 组件“管理图形 [...] 输出”,并“解释鼠标和键盘输入”,因此根据上述定义,它确实可以称为合并 View 和 Controller 。
  • 我同意你是/将被迫合并 Controller 和模型(再次关于上面的定义)。
  • 我同意,再次。模型应该只管理应用程序域的数据。这就是他们所说的“数据”。显然,例如处理行和列通常与我们的应用程序域无关。

  • 它把我们放在哪里?在我看来,当我们使用 Qt 编程时,最好弄清楚 Qt 在使用术语“模型”和“ View ”时的真正含义,并以它们的方式使用这些术语。如果你一直被打扰,它只会减慢你的速度,而且 Qt 中的设置方式确实允许优雅的设计 - 这比他们的“错误”命名约定更重要。

    关于model-view-controller - 为什么 Qt 滥用模型/ View 术语?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5543198/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com