【问题标题】:Error Handling in Model (MVC)模型中的错误处理 (MVC)
【发布时间】:2010-11-29 22:32:09
【问题描述】:

我想知道处理模型中的错误的例外标准是什么。

目前我的所有模型都在使用“setError”和“getError”方法。

这意味着我只关心对模型中的方法的调用是真还是假。如果它是假的,那么我会在我的控制器中使用$this->model->getError()

此外,我正在考虑设置一个包含我所有错误的单独文件。每个模型一个文件,也想对此有想法。

【问题讨论】:

    标签: php model-view-controller error-handling model


    【解决方案1】:

    在做出最终决定之前,请查看 NerdDinner 教程,了解如何创建验证例程:

    http://nerddinnerbook.s3.amazonaws.com/Part3.htm

    验证部分大约是页面下方的 2/3。

    【讨论】:

      【解决方案2】:

      我一直在使用 log4j 和 log4cxx 并记录到 syslogd。 Kiwi 是一个简单的 Win32 系统记录器,它将跟踪您的日志消息并将它们保存到文件中。 Log4j / Log4cxx 具有可用于设置所有日志级别或日志消息目标的配置文件(您可以登录到多个位置)。

      设置和使用只需很少的努力,它就像一个魅力。

      我自己还没有尝试过log4php

      当您不再希望程序继续执行时,例外是好的。在高级别捕获异常,您可以接受执行失败的后果。

      【讨论】:

        【解决方案3】:

        更简单的解决方案是使用exceptions

        当您向用户显示的错误发生时,抛出一种特殊类型的异常 - 可能名为 UserError。抛出异常时,异常应包含错误消息的文本。这些类型的错误是功能,它们为用户提供有用的信息(即他们试图删除不存在的东西 - 当他们打开多个浏览器时可能会发生这种情况等)

        例如:

        throw new UserError("That object no longer exists.");
        

        当您想要对用户隐藏的错误发生时,抛出不同类型的异常,可能名为InternalError。您可能希望记录此内容并允许程序继续运行,以便对用户隐藏特定错误。如果它阻止了某些事情的发生,您可能想要抛出一个通用错误消息。这些将是错误,您希望尽快修复它们。

        例如:

        throw new InternalError("Failed to connect to remote service");
        

        所有错误消息都可以存储(硬编码)在引发异常的源中。这不一定是一种糟糕的设计实践 - 如果您使用像 gettext 这样的工具,您可以轻松翻译所有这些消息。

        【讨论】:

        • 我喜欢这个想法,唯一需要注意的是,如果有多个错误,理想情况下我想记录错误并继续执行。因此我使用 setError 和 getError。我检查返回是否为真,这意味着所有操作都成功,如果没有,我得到错误。一个动作可能部分成功,因此我想返回 false 并使用 getError 来获取指示哪个部分不成功的消息。希望这是有道理的。
        猜你喜欢
        • 2011-12-31
        • 2011-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多