【问题标题】:Exception handling in Model/Controller MVC模型/控制器 MVC 中的异常处理
【发布时间】:2014-07-04 04:58:41
【问题描述】:

我最近刚刚开始学习 MVC 模式,最初是在 android 中,但目前使用的是 spring MVC 框架。我想知道在模型或控制器中进行测试/异常处理是否更合适。我的意思是,假设我在模型中有一些字段应该限制为某些值或某个值范围;我应该在模型中测试输入并抛出异常并让控制器捕获它们,还是控制器应该在将输入转发到模型之前自行检查输入?

我对在控制器中进行测试的担忧是,我可能需要检查多个位置的值,而如果我要在模型中进行测试,它只在一个地方完成。我对检查模型中的输入的担忧是,出于某种原因,这对我来说似乎很奇怪。然后我又是这种模式的新手,所以我还不知道。

什么是规范?推荐什么?

谢谢大家

【问题讨论】:

    标签: spring exception spring-mvc model-view-controller exception-handling


    【解决方案1】:

    在模型和控制器中进行测试和/或异常处理是合适的,这对于异常处理来说是最合适的。

    例如,如果您想从字符串中解析数字并在字符串不包含数字时使用默认值,并且您正在模型中进行解析,那么您应该在模型中处理 numberformatexception。 我认为这是一个“预期的”例外。

    private String blammyValue;
    
    public int getBlammyAsInt()
    {
        int returnValue;
    
        try
        {
            returnValue = Integer.parseInt(blammyValue);
        }
        catch (NumberFormatException exception)
        {
            returnValue = -1; // some default value
        }
    
        return returnValue;
    }
    

    如果异常是不寻常的, 像数据库异常, 并且没有合理的默认行为, 然后在控制器中捕获它是有意义的。

    【讨论】:

    • 您的意思是如果异常类似于数据库异常,则将异常从模型重新抛出到控制器??
    • 不,只是不要在模型中抓住它,让它被控制器抓住。
    • 感谢您的回答 dwb,我还有一个问题,如果我在控制器中捕获到异常,这意味着我必须检测并写入控制器中的日志(logget.error(“数据库打开” , ex)) 而不是在模型中,对吗?
    • 记录是一个有趣的问题。您应该记录对应用程序有意义的异常;这可能意味着登录模型。如果您正在登录模型,您将捕获异常以记录它,然后(可能)重新向控制器抛出相同的异常。登录模型意味着您应该有权访问有助于清除日志消息的数据(甚至可能只是模型方法名称)。
    猜你喜欢
    • 2013-06-07
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多