应该尝试/捕获不属于类方法吗?

时间:2013-10-29 15:10:56

标签: oop try-catch theory

从最佳实践的角度来看,在实现对象的方法时应该使用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());
    }

2 个答案:

答案 0 :(得分:2)

这取决于异常处理的目标。

如果目标是在出现错误时显示错误消息(如示例中所示),则异常处理属于视图(Windows窗体)。当需要用户交互来解决问题时,这很有用。

但是,如果您的数据模型应返回某个默认值,或者尝试通过从远程服务器加载新数据从异常中恢复,例如,此逻辑不属于视图。

答案 1 :(得分:0)

数据访问代码通常不应直接与用户交互。如果在数据访问方法中可能需要用户交互,则调用者应提供一个或多个可用于请求此类交互的委托。通过这种方式,调用数据访问代码的用户界面代码可以定义以与UI的其余部分一致的方式执行用户交互的方法,并将这些方法传递给数据访问代码。