• 机房收费系统多种验证和多返回值


    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层(或者是说一个方法中);不同的地方一个是在方法中给出提示,另外一个是在调用这个方法的时候给出提示信息。


  • 相关阅读:
    [LeetCode] Most Profit Assigning Work 安排最大利润的工作
    [LeetCode] Friends Of Appropriate Ages 适合年龄段的朋友
    [LeetCode] Goat Latin 山羊拉丁文
    [LeetCode] Binary Trees With Factors 带因子的二叉树
    [LeetCode] Card Flipping Game 翻卡片游戏
    [AWS] Nginx Started but not Serving AWS上Nginx服务器无法正常工作
    [LeetCode] Shortest Distance to a Character 到字符的最短距离
    [LeetCode] Short Encoding of Words 单词集的短编码
    [LeetCode] Most Common Word 最常见的单词
    Solve Error: MissingSchemaError: Schema hasn't been registered for model "YourModel".
  • 原文地址:https://www.cnblogs.com/riskyer/p/3243664.html
Copyright © 2020-2023  润新知