我希望这不是一件非常微不足道和显而易见的事情。
我正在从事一些类似的程序。在每个程序中,我都必须实施有关保存项目的未来。我带来了以下设计:
Project
-- Program1Project
-- Program2Project
基类项目:
class Project
{
public:
void NewProject();
void SaveProejct();
void OpenProject();
protected:
virtual void New();
virtual void Save();
virtual void Open();
};
虚函数在派生类中重新实现,导致只有特定程序知道如何(将哪些对象保存到磁盘)实际保存项目。
此外,保存新项目或打开项目的一部分是显示 SaveAs/Open 对话框,用户可以从中选择保存/打开项目的位置。例如,NewProject() 是根据 New 方法实现的:
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 行是我的所有程序都需要的代码,即创建对话框和执行检查的流程和顺序是相同的。
我在想是否应该将创建对话框的实际代码放在 Project::New 和 Project::Open 方法中。经过一番思考,我认为这不是一个好的解决方案,因为项目类是模型类,模型类不应该创建 GUI。所以,我在想,从第 1 行到第 5 行编写代码的最佳位置可能是在特定程序的保存/打开按钮事件处理程序中。但这意味着我将不得不为每个程序复制它。
所以问题是我应该如何将我的所有程序都相同的对话框的创建与不需要复制代码的项目的实际保存/打开分开?