问题描述
最近在开发一个WinForm应用程序,用的DAO--controller--form3层架构,程序最易出错的是在dao数据层,我捕捉到后,是一层层往上抛到form处理,还是就直接Dao层处理呢,怎么样使异常更友好呢,没什么经验,求指点.
解决方案
解决方案二:
你要怎么处理?给用户一个“提示”?这当然是最外层表现层做的事情,数据层怎么可能知道如何给用户提示?
解决方案三:
比如说,同样是一套类库,放到手机端它可能就需要“振动一下”然后调用手机的模态对话框;放到类似asp.net也页面程序里就需要向当前页面动态插入javascript脚本并且处理提示之后的回发;放到asp.netashx这类程序就需要给出一个http错误码;放到wpf程序可能就需要调用windowsnotifyicon气泡程序以及一个ErrorWindow窗体;放到其它类型的程序有其它的各种表现形式.......在不应该纠结的层面去纠结“使异常更友好”其实根本是成事不足的。
解决方案四:
引用2楼sp1234的回复:
比如说,同样是一套类库,放到手机端它可能就需要“振动一下”然后调用手机的模态对话框;放到类似asp.net也页面程序里就需要向当前页面动态插入javascript脚本并且处理提示之后的回发;放到asp.netashx这类程序就需要给出一个http错误码;放到wpf程序可能就需要调用windowsnotifyicon气泡程序以及一个ErrorWindow窗体;放到其它类型的程序有其它的各种表现形式.......在不应该纠结的层面去纠结“使异常更友好”其实根本是成事不足的。
那就是把数据层捕捉到的异常往上抛吗?没有开发过大型的软件系统,没有经验,软件架构什么都不是很清楚,有时候会比较以后,这个异常倒地是抛上去,还是直接message.show掉..
解决方案五:
你指的异常处理是什么样的处理?写日志还是其他?如果是写日志,看你是写到数据库还是txt,不同方式处理异常的地方有所区别。提示是form那边的事情,你可以在controllortrycatch写日之后,返回一个结果,结果内容包括此次操作是否成功,失败的话,回传个代码,form那边根据代码匹配对应的提示信息进行提示。
解决方案六:
当然应该向上抛。
解决方案七:
这个异常倒地是抛上去,还是直接message.show掉怎么可能message.show,如果是网站,服务,控制台,你show给谁看如果是多线程同时执行,同时都连接不上,那你难道show一大堆窗体出来捣乱?显示就应该UI层去处理,DAL层不要管如何显示你其实应该纠结的是到底在catch里捕获异常后是直接throw出去,还是增加一些内容再throw出去,还是throw一个自定义故障号,还是不throw而在返回值的地方返回错误信息.
解决方案八:
楼上说的对。目测楼主是想增加点内容在输出,或者说整理后输出个比较容易理解的提示。catchthrow的话,整个具体的调用过程所有方法,全部是throw,我觉得应该在你调用的地方,或者调用的接口内部处理。处理的部分独立出来就完事了。
解决方案九:
catch里记录log,便于跟踪处理。给客户show出来的是通俗易懂的提示,你给客户看一堆Exception,客户也看不懂。
解决方案十:
向上抛,由UI端决定如果进行交互