Winforms 如何在MVC/MVVM Windows窗体应用程序中执行错误处理

Winforms 如何在MVC/MVVM Windows窗体应用程序中执行错误处理,winforms,model-view-controller,mvvm,error-handling,webformsmvp,Winforms,Model View Controller,Mvvm,Error Handling,Webformsmvp,我正在使用类似于MVC的模式构建一个应用程序。接下来的情况是:在模型对相关存储库进行更改的上下文中。如果更改引发异常,那么向用户显示错误信息的正确方法是什么? 在我的程序的前一个版本中,当我有意大利式代码组织(模型、视图、控制器重叠)时,启动一个messagebox告诉用户错误并不奇怪,因为我几乎从视图中执行所有操作。现在,在这个新版本中,我希望正确地执行这些操作,所以我想,在模型层中执行任何具有可视表示的操作都是不好的。 不久前,我问捕获异常的正确方法是什么。我提到的具体点是将异常从内部代码扩

我正在使用类似于MVC的模式构建一个应用程序。接下来的情况是:在模型对相关存储库进行更改的上下文中。如果更改引发异常,那么向用户显示错误信息的正确方法是什么? 在我的程序的前一个版本中,当我有意大利式代码组织(模型、视图、控制器重叠)时,启动一个messagebox告诉用户错误并不奇怪,因为我几乎从视图中执行所有操作。现在,在这个新版本中,我希望正确地执行这些操作,所以我想,在模型层中执行任何具有可视表示的操作都是不好的。 不久前,我问捕获异常的正确方法是什么。我提到的具体点是将异常从内部代码扩展到上层,而不是在最上层捕获它们。几乎所有的响应都是,这不是一种很好的方法,可以扩展异常(捕获并再次抛出以被负责的实体捕获),最好在最上层捕获。 所以我脑子里有这种矛盾。我认为,为了扩大规模,保持关注点分离是不可避免的,但这与之前的建议相冲突。
如何继续?

常见的模式是在现有模型中放置错误的通用位置

一种简单的方法是让您的模型类都继承自具有类型为
IEnumerable
的属性或您选择的其他类型的基本模型类

然后,在演示者中,您可以检查错误集合并根据需要显示

就异常冒泡而言,我使用的方法(几乎不管我正在构建什么类型的应用程序)是,如果您要进行一些特殊的日志记录(如记录重要的局部变量),或者如果您可以对该异常进行一些智能化处理,则只处理较低级别的异常。否则,就让它冒泡吧

在演示者(或web服务类,或其他)前面的层,您可以捕获异常,执行常规日志记录,并将它们包装(或替换为)一个“净化”异常。在UI的情况下,您只需确保不泄露敏感数据,并尽可能显示友好消息。对于web服务,您会将其转化为某种错误。等等

最上层并不“负责”冒泡异常,他们只是负责确保这些异常不会以您不希望的形式显示给最终用户(或web服务客户端,或其他什么)。。。换句话说,你是在恰当地“呈现”他们

请记住,关注点分离是一种你应该遵循的经验法则,而不是拥有一切的法令。就像漏洞百出的抽象一样,也有漏洞百出的范例。做有意义的事,不要太担心。:)