从最佳实践的角度来看,在实现对象的方法时应该使用try / catch
语句,还是可以将它们编码到方法本身中?
例如,我将在C#中编写一个数据库类。当我调用runCommand()
方法时,最好的做法是做这样的事情吗?
//inside class method 'runCommand()'
try
{
_command = new MySqlCommand(query, _connection);
return _command;
}
catch (MySqlException e)
{
System.Windows.Forms.MessageBox.Show(e.ToString());
return _command;
}
...或类似的东西?
//inside a Windows form and assuming an object 'myDB'
private void btnRunCommand_Click(object sender, EventArgs e) {
try {
myDB.runCommand("SELECT * FROM test");
}
catch (MySqlException e) {
MessageBox.Show(e.ToString());
}
答案 0 :(得分:2)
这取决于异常处理的目标。
如果目标是在出现错误时显示错误消息(如示例中所示),则异常处理属于视图(Windows窗体)。当需要用户交互来解决问题时,这很有用。
但是,如果您的数据模型应返回某个默认值,或者尝试通过从远程服务器加载新数据从异常中恢复,例如,此逻辑不属于视图。
答案 1 :(得分:0)
数据访问代码通常不应直接与用户交互。如果在数据访问方法中可能需要用户交互,则调用者应提供一个或多个可用于请求此类交互的委托。通过这种方式,调用数据访问代码的用户界面代码可以定义以与UI的其余部分一致的方式执行用户交互的方法,并将这些方法传递给数据访问代码。