业务层中如何返回错误信息
时间: 2019-05-26来源:博客园
前景提要
业务层中如何返回错误信息
0 悬赏园豆: 30 [待解决问题] 向大家请教一个问题,在业务层中出现业务错误,是使用异常还是返回值去报告错误呢?
比如说在业务层中去登录,结果发现用户名或密码错误,那这个时候如何去报错这个错误。
假如是用返回值,那么业务层本身也是需要返回一个正常状态下的数据的,这个时候是用元组(Tuple)或者out参数?out参数在async方法中是不能用的。 C# java 程序设计 设计 守望雲影 | 初学一级 | 园豆: 32
提问于:2019-05-26 20:53 显示帮助
使用"Ctrl+Enter"可进行快捷提交,评论支持部分 Markdown 语法:[link](http://example.com) _italic_ **bold** `code`。
< > 分享
分享您的问题
所有回答(5) 1 个人推荐使用异常机制,就算使用返回值包括错误,还是少不了要捕捉异常,不如只捕捉异常好了,只是多一个异常类型而已。再说,从历史的角度看,异常机制的出现就是为了优化用返回值报错的机制的。 会长 | 园豆:8470 (大侠五级) | 2019-05-26 21:54 编辑文本 预览 上传图片
Ctrl+Enter键快速提交 0 同意楼上观点,自定义一个业务异常类,可以加上错误码字段,方便准确的记录和跟踪异常。 拓荒者-NET | 园豆:242 (菜鸟二级) | 2019-05-26 22:23 编辑文本 预览 上传图片
Ctrl+Enter键快速提交 0 为什么要定义一个异常返回哦,你可以返回一个model,里面至少包括两个节点:
1、status(状态枚举码)
2、errorMessage
3、其他节点
这样在使用这个接口的时候,很容易判断和知道是什么错误,并根据不同的错误编码做响应的逻辑处理 程序员修炼之旅 | 园豆:702 (小虾三级) | 2019-05-27 10:21 赞同! 支持( 1 ) 反对( 0 ) 程序员蒋某 | 园豆:200 (初学一级) | 2019-05-28 19:39 这样的话,控制器里面会非常复杂,如果一个控制器方法里面使用多个业务层方法,都得接受哦一个封装的model类型,判断status。 支持( 0 ) 反对( 0 ) 友个人 | 园豆:226 (菜鸟二级) | 2019-07-30 13:45 @友个人: 如果你这样说,是不是要考虑程序分层问题了呢?
我平时的使用,你看看能否有帮助:
1、控制器就是一个调通桥梁(UV和业务处理中间桥梁)
在控制器里面,不会做任何业务逻辑处理,值需要把业务层的逻辑处理结果返回给调用放即可
2、具体的业务逻辑处理都是当道业务层去处理
3、这样做的目的,就是业务解耦 支持( 0 ) 反对( 0 ) 程序员修炼之旅 | 园豆:702 (小虾三级) | 2019-08-12 17:29 编辑文本 预览 上传图片
Ctrl+Enter键快速提交 0 建议全局异常,不论你是在代码的任何地方都可使用;如果使用返回值,调用栈过深,还需要一层一层返回 rhyme | 园豆:198 (初学一级) | 2019-05-30 11:38 有道理 支持( 0 ) 反对( 0 ) 友个人 | 园豆:226 (菜鸟二级) | 2019-07-30 13:46 如果这样处理,是不是太暴露了。
其实道理很简单,正常的业务逻辑,是会根据返回的不同错误做不同的业务处理,如果按照你的方式,那就麻烦了哦,调用放无论什么错误,都是收到的一个全局异常处理加工后数据
......... 支持( 0 ) 反对( 0 ) 程序员修炼之旅 | 园豆:702 (小虾三级) | 2019-08-12 17:33 编辑文本 预览 上传图片
Ctrl+Enter键快速提交 0 你可以这样子的架构你的程序。你在一个配置文件中写上全居的异常处理码 比如
301=用户登录失败,密码不正确
302=用户登录失败,用户名不正确
然后在代码中的业务方法中,自定义异常类,这个你可以定义多个异常类,但是须得有一个父类比如你类中 BusiException
然后你在控制层返回给客户端的时候 加 try(){}catch(BusiException) 然后你从异常中获取到你的异常码 比如301,然后从配置文件中读取对应的内容。这样子就可以完美的响应给客户端了 yasin0824 | 园豆:202 (菜鸟二级) | 2019-05-30 15:40 编辑文本 预览 上传图片
Ctrl+Enter键快速提交
清除回答草稿
您需要 登录 以后才能回答,未注册用户请先 注册 。

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

热门排行