首页 / 知识
关于c#:如何使用MVP将服务层消息/错误传递给更高层?
2023-04-12 20:31:00
How Do You Communicate Service Layer Messages/Errors to Higher Layers Using MVP?我目前正在从UI编写ASP.Net应用程序。我正在实施一个MVP架构,因为我厌倦了Winforms并希望能够更好地分离关注点。 因此,使用MVP,Presenter处理由View引发的事件。这是我用来处理用户创建的一些代码:
我使用内置的.Net验证控件完成了主表单验证,但现在我需要验证数据是否足以满足服务层的标准。 假设以下服务层消息可以显示:
我们还要说,UI无法预期的服务层中会有更多规则。 目前,如果事情没有按计划进行,我正在让服务层抛出异常。这是一个足够的策略吗?这段代码对你们有异味吗?如果我写了这样的服务层,你会不得不编写以这种方式使用它的Presenters吗?返回代码似乎太旧了,bool只是没有足够的信息。
Cheekysoft,我喜欢ServiceLayerException的概念。我已经有一个全局异常模块用于我不期望的异常。你觉得让所有这些自定义异常变得单调乏味吗?我认为捕获基础Exception类有点臭,但不确定从那里取得进展。 tgmdbm,我喜欢在那里聪明地使用lambda表达式! 感谢Cheekysoft的后续行动。因此,如果您不介意用户显示单独的页面(我主要是Web开发人员),如果不处理异常,我猜这将是策略。 但是,如果我想在用户提交导致错误的数据的同一视图中返回错误消息,那么我是否必须在Presenter中捕获异常? 以下是Presenter处理ServiceLayerException时CreateUserView的样子:
对于这种错误,最好将它报告给同一个视图。 无论如何,我认为我们现在超出了我原来问题的范围。我会玩你发布的内容,如果我需要更多详细信息,我会发布一个新问题。 这对我来说听起来很合适。异常是可取的,因为它们可以从服务层内的任何位置抛到服务层的顶部,无论它在服务方法实现中嵌套有多深。这样可以保持服务代码的清洁,因为您知道调用演示者将始终获得问题通知。 不要抓住异常 但是,不要在演示者中捕获异常,我知道它的诱惑因为它使代码更短,但是您需要捕获特定的异常以避免捕获系统级异常。 规划简单的异常层次结构
如果要以这种方式使用异常,则应为自己的异常类设计异常层次结构。 然后,您的演示者可以选择这样做
在您自己的异常类中使用继承意味着您不需要在演示者中捕获多重异常 - 如果需要,您可以 - 并且您最终不会意外捕获无法处理的异常。如果您的演示者已经位于调用堆栈的顶部,请添加一个catch(Exception)块以使用不同的视图处理系统错误。 我总是试着将我的服务层视为一个单独的可分发库,并将其视为具体的异常。然后由演示者/控制器/远程服务实现决定是否需要担心特定细节或仅将问题视为一般错误。 正如Cheekysoft建议的那样,我倾向于将所有主要的异常移动到ExceptionHandler中,并让这些异常冒出来。 ExceptionHandler将为异常类型呈现适当的视图。 但是,任何验证异常都应该在视图中处理,但通常这种逻辑对于应用程序的许多部分是通用的。所以我喜欢这样的帮手
然后在致电您的服务时,请执行以下操作
然后在错误是空的,你很高兴。 您可以进一步使用自定义异常处理程序扩展它,它处理不常见的异常。 在回答后续问题时: 至于创建异常变得乏味,你有点习惯。使用优秀的代码生成器或模板可以在大约5或10秒内创建具有最少手动编辑的异常类。 但是,在许多现实世界的应用程序中,错误处理可能是工作的70%,因此它只是游戏的一部分。 正如tgmdbm建议的那样,在MVC / MVP应用程序中,我让所有不可处理的异常冒泡到顶部,并被委派给ExceptionHandler的调度程序捕获。我进行了设置,以便它使用ExceptionResolver查看配置文件,以选择适当的视图来显示用户。 Java的Spring MVC库做得非常好。这是来自Spring MVC的异常解析器的配置文件的片段 - 它用于Java / Spring,但你会明白这一点。 这会占用演示者/控制器的大量异常处理。
|
最新内容
相关内容
python如何错误追踪
python如何错误追踪,培训,异常,信息,错误,文件,日志,控制台,字符串,模块,后者,python中的traceback模块被用于跟踪异常返回信息,可以在loggingpythonreturn语法错误怎么解决
pythonreturn语法错误怎么解决,培训,函数,语法错误,字符串,数值,使用说明,语句,定义,对象,以上,return语句是python语言中函数返回的一个值,每pythonPython错误有什么
pythonPython错误有什么,代码,培训,资料,平台,错误,空格,变量,赋值,制表符,属性,我们在写python代码时,有时候会遇到莫名的错误,而且查阅了很多python新手常犯错误有哪些
python新手常犯错误有哪些,代码,有限,培训,标准,项目,波浪,情况,冒号,错误,同学,下面总结新手学习python经常遇到的坑,需要的同学可以参考错误python错误类型有哪些
python错误类型有哪些,异常,系统,培训,错误,代码,标准,检测,类型,程序,逻辑,python的错误有语法错误和逻辑错误语法错误程序执行过程中,pythonpython报的错误怎么处理
python报的错误怎么处理,异常,代码,名称,检测,培训,状态,信息,项目,密码,语句,在编写Python代码或开发实际应用的项目时,程序报出异常或错误是python怎样忽略warning警告错误?
python怎样忽略warning警告错误?,培训,情况,代码,错误,模块,下面,之前,以上,程序,更多,python开发中经常遇到报错的情况,但是warning通常并不python异常和错误有什么区别
python异常和错误有什么区别,异常,检测,软件,培训,错误,发生,程序,程序员,逻辑,措施,1.错误从软件方面来说,错误是语法或是逻辑上的。语法错误pythonTKinter的消息传递机制
pythonTKinter的消息传递机制,培训,系统,消息,机制,事件,函数,程序,队列,组件,框架,pythonTKinter的消息传递机制1、自动发送事件/消息。2、python静态web服务器如何实现
python静态web服务器如何实现,数据,培训,服务,代码,时间,服务器,静态,报文,浏览器,消息,python静态web服务器如何实现的方法:1、编写TCP服务器多种形式的Delphi应用程序和对话框
多种形式的Delphi应用程序和对话框,多种形式的Delphi应用程序和对话框,视图,所见即所得,应用程序,文档,Multiple form Delphi applic如何从部署在64位服务器上的SSIS包
如何从部署在64位服务器上的SSIS包访问Excel数据源?,如何从部署在64位服务器上的SSIS包访问Excel数据源?,文件,数据,传输,第三方,How d