c++ - 关于 MVC View 界面的良好设计实践

标签 c++ model-view-controller user-interface

我不需要经常创建 GUI,但今天我这样做是希望得到一些设计输入。

基本上我有一个后端,我也打算使用 MVC 模式添加一个 GUI。问题是我觉得任何封装主 GUI 窗口的类都会有很多状态(所有子元素);最重要的是,它将有很多 setter,可能还有 getter、clear、color、size、position 和 refresh 函数。

  • 一个选择是推进这个想法并拥有一个非常大的公共(public)界面来处理 GUI 使用的类型(std::stringstd::vector<std::string> ...),我想要对 UI 进行更多控制我需要的公共(public)成员函数越多。

  • 另一种选择是将程序状态传递给 GUI 并让它决定如何显示它,我担心这样做会导致我无法很好地控制细节,并且会破坏关注点分离这意味着对程序状态表示的任何更改也需要更改 GUI。

关于此事的任何意见都会有很大帮助。

如果有什么不同的话,这是一个使用 ncurses 抽象的 C++ gui。

最佳答案

在我看来,您似乎对 M 和 V 想了很多,但对 C 想得不多。该模式应该真正称为 MCV,因为整个想法是 Controller 是您的模型(数据)之间的桥梁) 和 View (GUI)。听起来您需要一个具有您提到的大部分功能的 Controller 。

简单地说,您的模型显然应该对显示一无所知,并且您的显示( View )应该不知道如何访问模型。您需要一个 Controller 来读取数据(模型)并向显示器( View )发出指令。如果您在 View 中有用户交互, Controller 可以解释它并根据需要修改模型。

想法是您永远不必更改所有 3 个,但如果您更改模型或 View ,您几乎总是必须更新 Controller 。

希望对您有所帮助...

关于c++ - 关于 MVC View 界面的良好设计实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15166293/

相关文章:

winforms - 如何使图片框可选择?

user-interface - TextFormFields 之间的空间

model-view-controller - 类应该模仿现实还是具有最佳的代码兼容性?

mysql - SQLSTATE[23000] : Integrity constraint violation: 1048 Column 'name' cannot be null (SQL: insert using Laravel 5. 1.*

java - 触发 Java GUI 更新

c++ - 为什么派生类不能代替基类作为模板参数?

python - urwid 中是否有相当于 GUI 文本字段的内容?

C++ new/new[],它是如何分配内存的?

c++ - 如何找出两个整数的乘积中设置了多少位(等于 1)

c++ - 使用winapi生成http代理ntlm消息