模型中的错误处理 (MVC)
Posted
技术标签:
【中文标题】模型中的错误处理 (MVC)【英文标题】:Error Handling in Model (MVC) 【发布时间】:2010-11-29 22:32:09 【问题描述】:我想知道处理模型中的错误的例外标准是什么。
目前我的所有模型都在使用“setError”和“getError”方法。
这意味着我只关心对模型中的方法的调用是真还是假。如果它是假的,那么我会在我的控制器中使用$this->model->getError()
。
此外,我正在考虑设置一个包含我所有错误的单独文件。每个模型一个文件,也想对此有想法。
【问题讨论】:
【参考方案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 来获取指示哪个部分不成功的消息。希望这是有道理的。以上是关于模型中的错误处理 (MVC)的主要内容,如果未能解决你的问题,请参考以下文章
Asp.Net MVC (RC 5) 中的 404 Http 错误处理程序