假设我有一个看起来像这样的函数:
public void saveBooking(/* some inputs */) {
//save into database
}
在保存到数据库之前,我必须进行各种验证。我在我的主程序中可以做的是这样的:
//do all the validations and do any necessary handling. Then...
saveBooking(/*inputs*/);
有了这个,我确信所有数据在保存到数据库之前都必须通过所有所需的验证。但是,这意味着该功能saveBooking()
密切依赖于验证方法。每次我想打电话saveBooking()
时,我都必须确保我不会忘记调用验证。
或者,我可以将所有验证放在函数本身中,这样我所要做的就是调用该方法,一切都会得到处理。但是,为了独立处理所有错误,我必须让函数抛出异常并在主程序中捕获。它应该看起来像这样:
public void saveBooking(/* some inputs */) /* throws various exceptions */ {
//various validations
//save into database
}
//...and in the main program...
try{
saveBooking(/*inputs*/);
}
catch(MyException1 e1){
//do something
}
catch(MyException2 e2){
//do something
}
这也意味着我必须自己创建多个异常。好消息是我不必担心我必须事先进行哪些验证。
有了这些,我不确定哪一个是最好的代码设计。我个人更喜欢第一种方法,它更具可读性,但它相互依赖太多,当我需要在很多地方使用它时,情况会变得更糟。请指教!