【发布时间】:2019-05-09 09:18:34
【问题描述】:
我正在尝试找出在 C++ 中为我正在构建的应用程序构建一些代码的最佳(最简洁)方法。我认为 MVC 是一种可行的方法,但经过大量研究后,我并不完全清楚我正在以正确的方式做事。
这里有一个例子来说明我的问题:
型号
我有一个类,其中包含名为Canvas 的绘图数据。用于清除画布当前内容的示例函数是ClearCanvas()。
最终,我希望界面中的一个按钮能够调用该函数并清除画布。
控制器
我有一个画布控制器类:CanvasController
控制器创建并保存对画布对象的引用:CurrentCanvas
控制器还创建视图:CanvasView,然后在视图上设置对自身的引用:CurrentCanvasView->SetControllerRef(this);
查看
视图由一系列定义 UI 的嵌套类组成。例如,导致相关按钮的层次结构可能是这样的:
CanvasView
-VerticalBox
--HorizontalBox
---Button
在视图的构造过程中,对控制器的引用从视图传递到所有交互元素,例如。 NewButton->SetControllerRef(this->GetControllerRef());
按下按钮
所以现在当按钮被按下时,它可以像这样工作:
void ClearCanvasButton::OnButtonPressed()
{
Controller->CurrentCanvas->ClearCanvas();
}
所以我的一般性问题是:(1) 这看起来是正确的做事方式,还是结构不好?
还有(2):控制器是否应该封装画布函数,例如:
void CanvasController::ClearCanvas()
{
CurrentCanvas->ClearCanvas();
}
这样按钮上的功能可以简单地是:
void ClearCanvasButton::OnButtonPressed()
{
Controller->ClearCanvas();
}
我只是不确定将控制器的引用传递给最终想要更改模型的视图的所有元素是否正确,或者是否有更简洁的方法。
如果这个问题已经以一千种不同的方式被问了一千次,我深表歉意,我一直在四处寻找以试图理解这一点。
【问题讨论】:
标签: c++ model-view-controller structure