【发布时间】:2015-04-11 16:15:48
【问题描述】:
假设我有两个主要课程,Application 和 ApplicationGUI。 Application 做了很多事情,并且可以在不知道 ApplicationGUI 存在的情况下愉快地运行。 ApplicationGUI 在很多方面与Application 相关联,它可能有 50 或 100 个不同的旋钮可以改变 Application 的行为。
ApplicationGUI 是一个层次结构,因此它有许多ControlGroup 实例,每个实例包含任意数量的Buttons 和Knobs,甚至是另一个ControlGroup。
当前设计:在ApplicationGUI 实例化后(Application 已经使用一些默认参数集运行),我将Application 参数的指针传递给 GUI 的各个组件。例如:
my_gui.sound_controlgroup.knob.link_to_param(&(my_application.volume));
如果我需要做一些更复杂的事情,比如说调用Application、my_application.update_something()的成员函数,这是怎么做的?
简单的答案是将指向 my_application 的指针传递给my_gui.sound_controlgroup.knob,但如果我只需要调用 my_application 的一个函数,似乎我正在给我的旋钮一个选项来更改它应该更改的各种东西甚至知道(例如my_application.update_something_unrelated())。在这种情况下,最干净的做法是什么?
此外,这要么要求将ApplicationGUI 的所有子组件公开,要么在层次结构的每个阶段都有一个函数来将该指针转发到底层。这导致了相当多的功能。这是带有很多旋钮的 UI 的必然结果吗?
【问题讨论】:
-
你有你的model,你有你的view ...在这里我非常想念像controller这样的中介(在它的一个化身中)。
-
嗯...好的。我熟悉控制器的概念。我一直在使用 JUCE 进行开发,它将控制器和视图视为一回事,我想这就是我从未想到过的原因。
-
@Chet Altought 在 GUI 控件中分离 MVC 等概念是一项非常强大的技术,我建议首先设计简单的控件,然后添加将视图与控制器分离的控件。
-
@umlcat 你是否建议我坚持使用我帖子中的上述选项(大量函数和传递指向复杂对象的指针)?
-
@Chet 不完全是。我之前的评论是关于不急于 View Controller 分离的。查看下面我的答案,以获得更多建议。
标签: c++ user-interface oop