前沿
非常设想准绳,参考微软msdn,连系本身的明白和过去的开辟中对非常毛病的处置惩罚,总结下软件开辟架构,怎样更好地设想一套非常毛病准绳。
引见准绳
execution failure观点
The meaning of execution failure: execution failure occurs whenever a member cannot do what it was designed to do (what the member name implies). For example, if the OpenFile method cannot return an opened file handle to the caller, it would be considered an execution failure.
翻译:
操纵失利的意义:不管什么时候一个成员模块不能完成它预期的使命时,就称为发生了一次操纵失利。比方OpenFile要领不能给caller返回一个翻开文件的句柄,这就是一次操纵失利。
架构中处置惩罚非常
In the Framework, exceptions are used for all error conditions, including execution errors.
翻译:
在框架中,非常被用来处置惩罚一切的毛病前提,包含实行毛病。
总结准绳
哪些要领在设想非常时应当被制止,哪些应当要without hesitation to do,哪些须要斟酌,都列在下方的表格中。
编号 | 要领 | 做法 |
---|---|---|
1 | 返回毛病代码 | 制止 |
2 | 实行毛病,要抛出非常;如OpenFile()未返回文件句柄 | 发起 |
3 | 假如代码再继承实行就变得不安全时,斟酌是挪用System.Environment.FailFast停止历程照样抛非常。 | 斟酌 |
4 | 假如有可以的话,在平常的掌握流处,抛非常,见下面的剖析 | 制止 |
5 | 抛非常对机能的影响。 | 斟酌 |
6 | 协议中归入非常处置惩罚部份 | 发起 |
7 | 将非常作为返回值返回 | 制止 |
8 | 运用非常生成器要领,为防备代码膨胀, 用helper要领建立非常和属性. | 斟酌 |
9 | 非常挑选器中抛出非常. | 制止 |
10 | 从finally 块中显现地抛出非常 | 制止 |
对第4条做申明:
In daily coding, consider the Tester-Doer pattern for members that may throw exceptions in common scenarios to avoid performance problems related to exceptions. The Tester-Doer pattern pides a call that might throw exceptions into two parts: a Tester and a Doer. The Tester performs a test for the state that can cause the Doer to throw an exception. The test is inserted just before the code that throws the exception, thereby guarding against the exception. 来自http://blog.csdn.net/troubleshooter/article/details/18401491
参考的例子代码:
Tester和Doer各司其职,圆满的减少了非常抛出,提拔机能。
Doer:上面的状况监测是好的,才DoProcess()处置惩罚;假如是false,而且假如DoProcess()中包含DoCheck()逻辑,则会抛出非常,然则如许分离隔后,DoProcess()将不会抛出非常!
if(DoCheck()==true)//这是Tester:状况监测 DoProcess();
软件开辟罕见非常及处置惩罚方式(本身总结)
1 UI层暴露出的操纵接口,发起包裹try{}catch{}块,catch中将抛出的非常写入到磁盘中。
2 UI层中用到计时器时,计数器的回调函数涌现非常后,要stop掉计时器,防备毛病日记一向写进文件中。
3 底层发起不包裹try{}catch{}块,发起用throw直接抛出非常,由于UI层上包裹了try{}和catch{}块,所以没必要写在这些层。
4 throw会直接中断今后操纵,跳转到所属客栈外层包裹try{}和catch{},即UI层,应用这个性子,平常发起函数不要返回毛病码。
5 处置惩罚批量导入的数据时,部分涌现非常。Excel导入职员,装备,设计,物料,工艺等,假如某一行数据违规了,这时候不发起抛出非常,由于一旦抛出非常,意味着背面行的数据导入不进来,而且已导入进去的成为脏数据。
平常有两种做法:某行涌现违规数据,记录到日记文件中,往后依据这个文件查到那条数据未导入,然后零丁处置惩罚这一条即可;在导入前,直接搜检一切行的数据是不是正当,搜检无误后,再逐一导入,不然直接弹出提醒,任何数据都写不到数据库中。平常发起后者做法。这类做法称为:Tester-Doer非常形式,也是微软发起的做法。
6 处置惩罚看板展现数据,部分涌现非常。这个处置惩罚形式跟5是有区分的,平常此时涌现非常,每每采用5的前者做法:展现出准确的数据,违规的数据写入到日记中,留待检察;然则也有可以,假如展现的界面,重要的数据不存在,则直接抛出非常,写入日记,经由过程日记处理。因而要依据数据的非常严峻水平去处置惩罚。
7 依据开辟文档、日记,剖析,只管做到可以找到某个功用未完成的缘由。首先要保留好开辟文档,检察用户如今的请求是不是是和开辟文档中的一致。假如一致,此时日记的作用就显现出来了,比方,汇总一周内一切工序的落成饼状图,假如一条工序数据都没有,那末饼状图可以就没有,在开辟过程当中,假如搜检了是不是是存在工序,假如没有找到一条工序,可以会抛出非常,然后写入日记地话,缘由就会找到。因而这类题目,也要写入日记,只管它不是毛病,但可以归为非常。
8 函数返回一个对象,其要领和属性被后续逻辑援用。这是不可防备的!而且大部份功用的完成都依靠于此。返回的这个对象由于要被后续援用,所以发起做null比较,假如为null,是传递给UI层,弹出音讯提醒,照样直接抛出非常,UI层处置惩罚后写入日记,视情况而定。
以上就是.NET框架-非常设想准绳详解的细致内容,更多请关注ki4网别的相干文章!