我正在使用类似于MVC的模式构建应用程序。下一个情况是:在模型的上下文中对相关存储库进行更改。如果更改抛出异常,向用户提供有关错误信息的正确方法是什么? 在我的程序以前的版本中,当我有spaguetti代码组织(模型,视图,控制器重叠)时,启动一个告诉用户有关错误的消息框并不奇怪,因为我几乎从视图中做了所有事情。现在,在这个新版本中,我想正确地做这些事情,所以我认为在模型层中做任何有视觉表示的东西都是不好的。 前段时间我问了什么是捕捉异常的正确方法。我所指的特定点是将内部代码中的异常扩展到上层,并将它们捕捉到最上层。几乎所有的反应是,这不是一个很好的方法规模异常(捕获和投掷再次被负责实体捕获),并且最好在最上层捕获。 所以我有这种冲突在我脑海中。我认为这是不可避免的,以维持问题的分离扩大,但这与以前的建议相冲突。 我该怎么办?我如何在MVC/MVVM Windows窗体应用程序中执行错误处理
2
A
回答
2
一种常见模式是有一个通用的地方可以将错误放入现有模型中。
做到这一点的一个简单方法是让您的模型类都从具有IEnumerable<ErrorBase>
类型的属性或您选择的其他类型的基本模型类继承。
然后,在您的演示者中,您可以检查错误收集并根据需要进行显示。只要有异常冒泡,我使用的方法(几乎不管我正在构建什么类型的应用程序)是只处理较低级别的异常,如果你要做一些特殊的日志记录(比如记录重要局部变量),或者如果你可以用这个异常做一些聪明的事情。否则,让它泡。
在您的演示者(或Web服务类,或其他)之前的那一层,您可以捕获您的异常,执行常规日志记录,并将它们包装(或替换为)“清理过的”异常。在用户界面的情况下,您只需确保不会泄露敏感数据,并在可能的情况下显示友好的信息。对于Web服务,您将这些问题转化为某种错误。等等
最上层对冒泡的异常没有“责任”,他们只是负责确保那些不显示给最终用户(或web服务客户端,或其他)你不希望他们......换句话说,你是在适当地“呈现”他们。
请记住,关注点分离是一种范例,您应该遵循作为经验法则,而不是一个拥有所有权的法令。就像抽象的抽象一样,存在漏洞的范例。做一些有意义的事情,不要太担心。 :)
相关问题
- 1. 从Windows执行批处理文件窗体应用程序
- 2. 我如何在Windows应用程序处理错误
- 3. 如何在Windows窗体应用程序中创建全局错误处理程序?
- 4. 在Windows窗体应用程序中执行Word拼写检查
- 5. 何处放置Windows窗体项目的中央错误处理程序
- 6. WPF + Windows窗体错误处理
- 7. Windows窗体应用程序中未处理的异常
- 8. 我应该如何处理Codeigniter应用程序中的错误
- 9. Windows窗体应用程序C#安装程序项目错误
- 10. 如何在Windows .NET服务中执行错误处理
- 11. Windows窗体应用程序
- 12. 如何在C sharp windows应用程序中处理交叉线程错误?
- 13. Windows窗体应用程序中的链接器错误
- 14. 客户端的Windows窗体应用程序错误只能在我的机器上正确执行
- 15. 在linux中执行远程命令时如何处理错误
- 16. Windows窗体应用程序中的Windows.Web.Http?
- 17. 发布一个Windows窗体应用程序 - 与参考错误
- 18. c#如何在Windows窗体应用程序中使用方法?
- 19. 如何在C/C++应用程序中使用Windows窗体?
- 20. 如何在Windows窗体应用程序中使用Ninject?
- 21. 如何在Windows窗体应用程序VB.net中使用会话?
- 22. 如何处理Express应用程序的运行时错误?
- 23. Windows窗体应用程序中的SQLException
- 24. Windows窗体应用程序中的WCF
- 25. 在我的asp.net mvc应用程序中处理错误
- 26. 我可以在Windows窗体应用程序中使用XpsDocument类
- 27. 如何在控制台应用程序中的Windows窗体应用程序中指定最后一个窗体?
- 28. 如果错误处理ASP.net web窗体
- 29. Windows窗体:在运行时更改应用程序主窗口
- 30. 如何在Windows窗体应用程序中迭代控件?
谢谢,我现在适用你的建议。 – mjsr 2011-03-20 08:17:51