模型中的错误处理 (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 3 中的错误处理

Asp.Net MVC (RC 5) 中的 404 Http 错误处理程序

C# MVC 处理视图中的编译错误,例如缺少程序集参考? [复制]

深入理解 MVC .net 中的延迟加载和处理错误

序列不包含元素错误 - MVC(模型和数据访问)

与 ASP.net MVC 中 Ajax 请求中的错误处理有关的疑问