我有一个方法DoCleanUp(),它将要求用户继续,然后清除当前工作区.如果用户选择取消此过程,它将返回.
我的问题是,哪个签名最好表示"取消"?
bool DoCleanUp(); // return false to indicate canceled.
bool DoCleanUp(); // return true to indicate this method should be canceled.
void DoCleanUp(bool& cancel); // check parameter 'cancel' to see if this method was canceled.
更新:至于语言,它是C++\CLI或C#.
UPDATE2:现在假设我必须在DoCleanUp方法中保存文件.我将提示对话框询问用户是否保存/取消保存/取消文件.基于答案,这是我提出的:
void DoCleanUp();
DialogResult AskToSaveFile(); // return yes/no/cancel
void DoCleanUp( bool saveFile );
用法:
void DoCleanUp()
{
DialogResult result = AskToSaveFile();
if( result == DialogResult::Cancel ) return;
bool saveFile = (result == DialogResult::Yes) ? true : false;
DoCleanUp( saveFile );
}
Run Code Online (Sandbox Code Playgroud)
然后通过调用DoCleanUp(),您知道用户将有机会取消;
通过调用DoCleanUp(bool saveFile),您可以控制是否在不询问用户的情况下保存文件.
这看起来更好吗?
这是一个经典的单一责任问题.
您不确定签名的原因是该方法正在做两件事.
我会创建2个方法:
bool CheckIfTheUserWantsToCancel()
void DoCleanUp()
Run Code Online (Sandbox Code Playgroud)
编辑
基于对问题的评论和编辑,我将创建第三种方法:
void SaveFile()
Run Code Online (Sandbox Code Playgroud)
然后DoCleanUp首先调用CheckIfTheUserWantsToCancel,如果没有取消则调用SaveFile.
恕我直言,这比试图记住带有参数false的DoCleanUp会在不询问用户的情况下保存文件要好得多,还是反过来呢?