2

我正在使用类似于MVC的模式构建应用程序。下一个情况是:在模型的上下文中对相关存储库进行更改。如果更改抛出异常,向用户提供有关错误信息的正确方法是什么? 在我的程序以前的版本中,当我有spaguetti代码组织(模型,视图,控制器重叠)时,启动一个告诉用户有关错误的消息框并不奇怪,因为我几乎从视图中做了所有事情。现在,在这个新版本中,我想正确地做这些事情,所以我认为在模型层中做任何有视觉表示的东西都是不好的。 前段时间我问了什么是捕捉异常的正确方法。我所指的特定点是将内部代码中的异常扩展到上层,并将它们捕捉到最上层。几乎所有的反应是,这不是一个很好的方法规模异常(捕获和投掷再次被负责实体捕获),并且最好在最上层捕获。 所以我有这种冲突在我脑海中。我认为这是不可避免的,以维持问题的分离扩大,但这与以前的建议相冲突。 我该怎么办?我如何在MVC/MVVM Windows窗体应用程序中执行错误处理

回答

2

一种常见模式是有一个通用的地方可以将错误放入现有模型中。

做到这一点的一个简单方法是让您的模型类都从具有IEnumerable<ErrorBase>类型的属性或您选择的其他类型的基本模型类继承。

然后,在您的演示者中,您可以检查错误收集并根据需要进行显示。只要有异常冒泡,我使用的方法(几乎不管我正在构建什么类型的应用程序)是只处理较低级别的异常,如果你要做一些特殊的日志记录(比如记录重要局部变量),或者如果你可以用这个异常做一些聪明的事情。否则,让它泡。

在您的演示者(或Web服务类,或其他)之前的那一层,您可以捕获您的异常,执行常规日志记录,并将它们包装(或替换为)“清理过的”异常。在用户界面的情况下,您只需确保不会泄露敏感数据,并在可能的情况下显示友好的信息。对于Web服务,您将这些问题转化为某种错误。等等

最上层对冒泡的异常没有“责任”,他们只是负责确保那些不显示给最终用户(或web服务客户端,或其他)你不希望他们......换句话说,你是在适当地“呈现”他们。

请记住,关注点分离是一种范例,您应该遵循作为经验法则,而不是一个拥有所有权的法令。就像抽象的抽象一样,存在漏洞的范例。做一些有意义的事情,不要太担心。 :)

+0

谢谢,我现在适用你的建议。 – mjsr 2011-03-20 08:17:51

相关问题