1.问题
机房收费系统中很普遍的一种情况:实现一个功能的时候需要多种验证;必然就会产生多种返回值。举个例子比如实现上机的功能,需要验证的信息有:基本数据是否设定,卡号是否存在,是否正在上机,卡内余额是否足够。这些验证都符合条件了之后我们才可以执行上机操作。
2.解决方案
那么对于这种情况应该如何解决呢?
1.多种验证
在系统中会发现在很多的功能实现都需要验证信息,那么就意味着我们在许多的功能实现的时候都需要调用这些验证方法,所以他们的使用频率很高。这样子我们就可以将这些验证方法封装在一个类中。
为什么封装起来呢?
1.调用方便:在调用的时候只需要在这个专门负责验证的类中随意调用需要的方法
2.减少耦合:如果验证方法写在不同的类中,在使用的时候就需要实例化每一个用到的类。而当我们将验证方法 封装成一个类,大大减少了类之间的耦合;当然如果将这个验证类写成一个接口那么他们之间的耦合又会降低
2.多种返回值
这种情况的出现是跟着上面的多种验证出来的。举个例子有一个上机方法,里面需要全部的验证信息验证完成之后才可以进行上机,那么在这个方法中就需要处理多个返回值。对于这种情况,有三种处理方式
第一种:
方法判断:
If 系统没有设置基本数据 then 返回0
Elseif 卡号不存在 then 返回1
Elseif 卡正在上机 then 返回2
Elseif 卡余额不足 then 返回3
End if
调用:
If 0 then msgbox
Elseif 1 then msgbox
Elseif 2 then msgbox
Elseif 3 then msgbox
End if
这种方法能够实现,但是感觉不是很好。举个例子来说,在个人版的机房收费系统中使用的三层架构,那么上面的方法判断是放在BLL层中某一个类的方法中的,调用此方法是在UI层,这个时候出现的一种情况是:对于验证信息的判断逻辑就要放在UI层中,但是我们都知道三层架构中业务逻辑应该是写在BLL层中的,所以觉得这种方案不是很好!
第二种:
方法判断:
If 没有设置基本数据 then msgbox("没有设置基本数据") End if
If 卡号不存在 then msgbox("卡号不存在") End if
If 卡号正在上机 then msgbox("卡号正在上机") End if
If 卡余额不足 then msgbox("卡余额不足") End if
和第一种的区别就是将全部的逻辑都放在了一个类的一个方法中实现;当判断不符合条件的时候直接弹出提示对话框!
第三种:抛出异常
方法判断:
If 没有设置基本数据 then Throw NewApplicationException("没有设置基本数据") End if
If 卡号不存在 then Throw NewApplicationException("卡号不存在") End if
If 卡号正在上机 then Throw NewApplicationException("卡号正在上机") End if
If 卡余额不足 then Throw NewApplicationException("卡余额不足") End if
调用:捕捉异常
Try
调用上机函数
Catch ex AS Exception
MsgBox(ex.Message) 显示错误信息
End Try
个人觉得后两种方案都可以。他们
相同的地方:逻辑都封装在了BLL层(或者是说一个方法中);不同的地方一个是在方法中给出提示,另外一个是在调用这个方法的时候给出提示信息。