我希望这不是非常简单和明显的。
我有一些类似的程序,我在工作。在每个项目中,我必须实施未来的节能项目。我想出了如下设计:如何从gui中分离模型?
Project
-- Program1Project
-- Program2Project
的基础类项目:
class Project
{
public:
void NewProject();
void SaveProejct();
void OpenProject();
protected:
virtual void New();
virtual void Save();
virtual void Open();
};
虚函数在派生类中重新实现导致只有特定的程序知道如何(哪些对象保存到磁盘)来实际上保存了项目。
保存新的或打开一个项目显示另存为/打开对话框,从中用户将选择在哪里保存/打开项目的也有一部分。
void Project::NewProject()
{
1. // Show dialog for whether to save existing project
2. // check whether the project was already saved
3. // if yes, only overwrite the existing project
4. // if no, show SaveAs Dialog
5. // ...
6. this->New();
}
行1至图5是代码,所有我的节目的需要,即,流动和为了在其中创建的对话框,并检查: 例如,NewProject()被新方法方面实现执行的是相同的。
我的想法是创建对话框中的实际代码是否应该被放置在项目::新和项目::打开方法。经过一番思考,我决定它不是很好的解决方案,因为Project类是模型类,而模型类不应该创建GUI。所以,我想可能是将代码从第1行写入第5行的最佳位置是在特定程序的保存/打开按钮事件处理程序中。但这意味着我将不得不为每个节目复制它。
所以,问题是我应该如何分开对话的创建,这将是我所有的计划同样在这样的实际保存/打开项目不需要的代码复制?
+1:此外,我们通常在开始编写GUI之前对模型进行单元测试。这确保模型独立于GUI而存在。然后,我们在模型完成并进行单元测试后添加GUI。 – 2010-01-26 14:41:16