我正在用C ++编写一个带有wxwidgets的GUI应用程序,用于我的一个编程类。如果不满足某些条件,我们必须验证输入并抛出自定义异常。我的问题是,在这方面,最佳做法是什么?我应该编写一个单独的函数来检查错误,并让我的事件处理程序调用该函数吗?或者我应该在事件处理程序中进行错误检查?或者它真的重要吗?
谢谢!
答案 0 :(得分:2)
抛出异常似乎有点奇怪。
我一直认为GUI应用程序应该防止无效数据被输入控件,这可以使用事件处理程序完成。对于表单上多个控件之间不一致的数据,应该在按下“确定”或其他情况时进行验证,如果数据不正常,则阻止表单关闭并指示错误。
验证也可以在按OK之前完成,但它不应该阻止输入数据,只能指出问题(并且可能禁用OK按钮直到其固定)。基本上,一旦用户编辑了他正在进行的下一个控件中的值,在此控件中输入的不一致值可能不会不一致。
尽量避免报告这些错误的消息框 - 表单中的状态栏或只读文本控件更好。
应定义一个函数/方法,对表单执行所有一致性检查,但不应抛出异常。错误输入不是典型用户的“例外”情况 - 它始终发生,尤其是当我是用户时。更重要的是,你应该只在错误处理会弄乱你的代码结构时才使用异常,这不应该是“这个表格中的数据好吗 - 是的,好的,接受并关闭”事件处理程序。
该函数应返回错误代码以指示要报告的错误 - 或报告错误本身并返回错误标记。
不久前,wxWidgets甚至不是异常安全的 - IIRC,在构建库时,你仍然必须启用异常安全作为选项。
答案 1 :(得分:0)
事实上,你提出了更大的担忧。要回答您的问题,如果您有多个需要相同验证的小部件,则可以将验证代码分解为不同的函数。或者只是因为你认为它适合 - 这取决于你。
但是,错误处理应该在哪里的决定是一个更具架构性的问题。考虑design by contract,这意味着任何方法都假定其参数或输入处于有效状态,并保证其输出或返回值也有效。这意味着您应该尽快验证用户的输入,而不是让内部逻辑处理它。