业务系统里面常见的方法接口设计
1. 简单的方法
void DoSth(args)
{
// do some thing here
// throw some error here if the method was not run correctly
}
方法没有返回值,也没有特别的错误标示,一般用在一些不易出错的 所以如果方法有可能执行不成功的时候,则可以在方法里面抛出异常,在调用的地方用catch捕捉。或者根本不捕捉方法里面可能产生的异常,从而让异常跟着堆栈往上层爬,一直到合适的位置才进行捕捉。这种情况通常用于对方法中的异常没有十足的把握处理、不想在本方法中处理异常、有意向上层屏蔽底层异常的情况。很多设计这主张“底层抛出异常,上层处理异常”的设计原则,在这种设计原则的指导下,用的最多的方法设计就是这种。
以下的几种方法都要求尽量捕捉方法中可能存在的Exception。
2. 返回字符串/数字
string/int DoSth(args)
{
// do some thing here
// return some message if the method was not run correctly
}
执行某个方法,然后把结果用字符串/数字的形式返回,比如返回“OK”/1表示执行成功,返回“不能预料的错误”/-1等信息表示没有正确执行
3. 返回布尔值
bool DoSth(args)
{
// do some thing here
// return true or false to tell the caller if the method was run correctly
}
执行某个方法,然后把结果用bool值的形式返回,true表示执行成功,false表示执行失败。一般用在只关心结果,不在乎为什么是那个结果或者导致结果的原因已经很明确的时候。
4. 返回布尔值和错误信息
bool DoSth(args, out string message)
{
// do some thing here
// return true or false to tell the caller if the method was run correctly
// set the error message to “message” if exception or error occurred.
}
执行某个方法,然后把结果用bool值的形式返回,如果出错,将错误信息设置到一个out 的参数中。这种方法适合于那些比较复杂,可能出现多种意外的方法,执行中出现的意外可以通过message来查看,而结果可以通过返回值来查看。调用方可以只在乎结果,也可以在乎原因。
5. 两个方法合作(或者一个方法和一个属性合作的方法)
string errorMessage;
bool DoSth1(args)
{
// do some thing here
// return true or false to tell the caller if the method was run correctly
// set the error message to “errorMessage” if exception or error occurred.
}
bool DoSth2(args)
{
// do some thing here
// return true or false to tell the caller if the method was run correctly
// set the error message to “errorMessage” if exception or error occurred.
}
string GetLastError()
{
return errorMessage;
}
方法本身只返回结果,但是当结果为false的时候,可以通过GetLastError来获取最后一个错误信息。这种设计适合于类里面存在很多可能出错的方法的情况,比如上面的DoSth1,DoSth2,这样就不必要为每个方法添加out参数,在实际中用得比较多。另外,当程序中存在循环,而又不想因为循环的某一次发生错误而终止程序的时候,也可以采取这种办法。
事实上,每一种方法都有其用武之地, 问题的关键在于我们使用一种约定,最好的办法就是在同一个系统里面尽量只使用其中的一种,以避免维护和后续开发上的麻烦。