一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

通用異常處理框架

  異常捕捉、處理是每個(gè)項(xiàng)目中必不可少的一部分,利用反射和XML配置技術(shù)實(shí)現(xiàn)一個(gè)通用的、靈活的、可配置的、高度可自擴(kuò)展的異常處理框架對(duì)項(xiàng)目的整體健壯性以及異常處理效率都是非常重要的。通用異常處理框架中需要提供配置信息的支持以及統(tǒng)一的異常處理類(lèi)和異常日志記錄類(lèi)管理,并允許用戶(hù)以插件形式擴(kuò)展自定義的異常處理或日志記錄方式。

  一、問(wèn)題的提出

  由于異常處理在項(xiàng)目中的普遍性,我們會(huì)很自然的想到是否可以對(duì)異常處理模塊進(jìn)行提取為公用模塊,加強(qiáng)項(xiàng)目間的復(fù)用,提高項(xiàng)目的開(kāi)發(fā)進(jìn)度。并且在異常處理中,因?yàn)闆](méi)有良好的異常處理系統(tǒng)可能造成一些問(wèn)題: 

  • 若異常處理方式不當(dāng),容易造成比較嚴(yán)重的性能問(wèn)題。
  • 在項(xiàng)目開(kāi)發(fā)階段,開(kāi)發(fā)人員需要得到完整的異常錯(cuò)誤信息方便分析BUG;在項(xiàng)目發(fā)布階段,用戶(hù)希望看到的是比較友好的錯(cuò)誤信息。一個(gè)良好的異常處理系統(tǒng)應(yīng)能夠通過(guò)簡(jiǎn)單的配置方便的達(dá)到這樣的效果
  • 異常處理系統(tǒng)應(yīng)該能夠提供足夠的信息方便開(kāi)發(fā)人員對(duì)BUG異常的準(zhǔn)確定位,減少查找BUG產(chǎn)生原因的時(shí)間。(該問(wèn)題在自己的項(xiàng)目中有過(guò)深刻教訓(xùn):因項(xiàng)目中異常信息的不準(zhǔn)確,導(dǎo)致一個(gè)BUG消耗大量人力時(shí)間)
  • 一個(gè)項(xiàng)目中各層對(duì)異常處理的方式不同,可能會(huì)不同的層編寫(xiě)不同的代碼,造成代碼使用麻煩以及復(fù)用性低,若需修改,可能改動(dòng)較大。(例如PDM項(xiàng)目中,除UI層外,都是對(duì)異常進(jìn)行包裝后拋給上一層捕捉;而UI層需要處理記錄異常,并反饋給用戶(hù);即便是UI層也應(yīng)WebUIWinUI采用的不同的方式實(shí)現(xiàn),提供給項(xiàng)目的接口也都有一定區(qū)別,增加了編碼的復(fù)雜程度) 
  •  異常報(bào)告信息沒(méi)有統(tǒng)一管理。很多項(xiàng)目中報(bào)告給用戶(hù)的錯(cuò)誤消息,都是程序員在開(kāi)發(fā)中自己編寫(xiě)的,對(duì)用戶(hù)而言,常常不是有效的友好的提示信息。集中管理后可以由BA來(lái)進(jìn)行錯(cuò)誤信息的整理,改善用戶(hù)體驗(yàn)。 
  • 異常記錄方式可能會(huì)在不同環(huán)境有不同的處理,應(yīng)該能通過(guò)配置文件簡(jiǎn)單的實(shí)現(xiàn),而不必每次為不同的應(yīng)用編寫(xiě)代碼。
  • 要把異常系統(tǒng)做成一個(gè)通用的框架,存在一個(gè)比較大的挑戰(zhàn):不同的項(xiàng)目可能因項(xiàng)目的整體構(gòu)架不同,對(duì)異常處理方式會(huì)有不同的需求,如何保持通用異常處理框架的靈活性的同時(shí)實(shí)現(xiàn)復(fù)用以及可配置性。

  二、解決思路

  為了最大程度實(shí)現(xiàn)異常處理框架的通用性、可擴(kuò)展性以及可配置性,采用配置文件結(jié)合動(dòng)態(tài)加載插件的方式:框架提供接口,由不同項(xiàng)目根據(jù)自己的需要實(shí)現(xiàn)接口,完成對(duì)異常的處理,以及異常日志的記錄;而框架再根據(jù)配置信息決定異常處理在不同的情況下的處理策略,并通過(guò)調(diào)用用戶(hù)實(shí)現(xiàn)的接口來(lái)完成異常處理過(guò)程。

  整個(gè)異常處理過(guò)程對(duì)項(xiàng)目調(diào)用高度封裝,項(xiàng)目中不論任何地方,只需調(diào)用一個(gè)唯一的接口,框架就會(huì)根據(jù)配置信息執(zhí)行需要的異常處理。

  三、實(shí)踐情況

  整體結(jié)構(gòu)

  框架主要由ExManagement.ConfigExManagement.InterfaceExManagement.MessageHandler以及ExManagement構(gòu)成。如圖:三-1

  • ExManagement.Config:用于從配置文件中獲取配置信息,并將配置信息轉(zhuǎn)換為一個(gè)配置信息實(shí)體對(duì)象,提供給框架的其他部分使用。
  •  ExManagement.Interface:提供異常處理類(lèi)、異常日志記錄類(lèi)以及異常錯(cuò)誤報(bào)告類(lèi)的接口和基類(lèi),便于用戶(hù)在框架的基礎(chǔ)上進(jìn)行自定義的擴(kuò)展
  • ExManagement.MessageHandler:對(duì)ExManagement.Interface中的IMessage接口實(shí)現(xiàn),提供了WebUIWinUI下的彈出錯(cuò)誤信息提示的支持。也可以直接編寫(xiě)一個(gè)滿(mǎn)足IMessage接口的包,以自己需要的方式彈出錯(cuò)誤提示信息。
  •  ExManagement:是控制和管理框架按照配置信息進(jìn)行處理的控制類(lèi)。首先根據(jù)異常處理配置加載需要的異常處理類(lèi)和日志記錄類(lèi),再按照配置信息內(nèi)容對(duì)異常進(jìn)行處理。并提供唯一的接口供項(xiàng)目調(diào)用。
  • ExManagement.Handler:默認(rèn)的異常處理包,包含了一種對(duì)異常處理的具體實(shí)現(xiàn)。用戶(hù)也可以繼承ExManagement.Interface中的ExHandlerBase基類(lèi),實(shí)現(xiàn)自定義的異常處理類(lèi),并通過(guò)修改配置文件讓框架調(diào)用。
  • ExManagement.LogHandler:默認(rèn)日志記錄包,包含一種將異常日志記錄到數(shù)據(jù)庫(kù)的具體實(shí)現(xiàn)。用戶(hù)也可以實(shí)現(xiàn)ExManagement.Interface中的ILogHandler接口,實(shí)現(xiàn)自定義的異常處理類(lèi),并通過(guò)修改配置文件讓框架調(diào)用。

 Package.JPG

圖三-1

  ExManagement.Config

  該包主要由兩部分組成:實(shí)現(xiàn)System.Configuration.IConfigurationSectionHandler接口的ExSectionHandler類(lèi)和配置信息實(shí)體類(lèi)ExManagerConfig。如圖三-2

       ExManagerConfig類(lèi)中又定義了3個(gè)嵌入類(lèi):ExHandlerConfigLogHandlerConfigLogHandlerConfigCollection以及三個(gè)枚舉ExAlertTypeErrorCodeSourceExReturnModeExManagerConfig,ExHandlerConfigLogHandlerConfig分別對(duì)應(yīng)配置文件中的   節(jié)點(diǎn)。ExManagerConfig是一個(gè)集合類(lèi),從System.Collections.CollectionBase繼承,包含若干個(gè)ExHandlerConfig對(duì)象,并通過(guò)索引器訪(fǎng)問(wèn)包含的ExHandlerConfig對(duì)象,支持以intstring兩種方式索引。ExHandlerConfig中除了包含對(duì)應(yīng)節(jié)的屬性外,還包含一個(gè)LogHandlerConfigCollection對(duì)象,是LogHandler類(lèi)的集合類(lèi)。
ExManagement.Config.jpg

圖三-2

 

  ExSectionHandler類(lèi)從配置文件中按照固定的格式獲取到相應(yīng)的配置信息,并將信息填充到ExManagerConfig

 

配置文件

<configuration>

     <configSections>

         <section name="ExManager" type="ExManagement.Config.ExSectionHandler, ExManagement.Config" />

     configSections>

    

     <ExManager ErrorCodeSource="XML/DB" ConnectionString="" DataTable="">

         <ExHandler Name="" Type="" ReturnMode="" AlertType="WebUI/WinUI/None"/>       

         <ExHandler Name="" Type="" ReturnMode="" AlertType="">

              <LogHandler Type="" ConnectionString="" DataTable=""/>

              <LogHandler Type="" ConnectionString="" DataTable=""/>

         ExHandler>

     ExManager>

configuration>

   首先需要在Web.Config或者App.Config中添加這行

<section name="ExManager" type="ExManagement.Config.ExSectionHandler, ExManagement.Config" />

  這句是指定用ExManagement.Config.ExSectionHandler類(lèi)來(lái)處理ExManager配置節(jié)點(diǎn)

  • 節(jié)點(diǎn)  包含ErrorCodeSourceConnectionString兩個(gè)屬性。
  • ErrorCodeSource屬性  該屬性是設(shè)置從何種數(shù)據(jù)源獲取錯(cuò)誤編號(hào)與錯(cuò)誤信息的對(duì)應(yīng)關(guān)系。其值只能是枚舉ErrorCodeSource的值:XML或者DB
  • ConnectionString屬性  該屬性是設(shè)置數(shù)據(jù)源的位置。若ErrorCodeSource屬性設(shè)置的是XML,則此處為XML文件的FullName;若ErrorCodeSource屬性設(shè)置的是DB,則此處為數(shù)據(jù)庫(kù)的連接字符串。
  • DataTable屬性  設(shè)置記錄異常日志使用的表名。
  • 節(jié)點(diǎn)  此節(jié)點(diǎn)為 節(jié)點(diǎn)的子節(jié)點(diǎn),至少得有一個(gè)以上的子節(jié)點(diǎn)。包含NameTypeReturnMode以及AlertType屬性。
  • Name屬性  為該異常處理器確定一個(gè)名稱(chēng)。在項(xiàng)目中調(diào)用異常處理方法時(shí),需要指定這個(gè)名稱(chēng)。一般建議用層的名字或者項(xiàng)目的名字。
  • Type屬性  指定異常處理器的類(lèi),格式為Type=”ClassName,  AssemblyName”。該類(lèi)必須從ExHandlerBase繼承。
  • ReturnMode屬性  異常處理器處理后返回給項(xiàng)目的值類(lèi)型。對(duì)應(yīng)枚舉ExReturnMode的值,只能取Exception/ExceptionString/ErrorCode/ErrorString,分別含義是:拋出異常/返回異常詳細(xì)描述/返回錯(cuò)誤編號(hào)/返回錯(cuò)誤信息。
  • AlertType屬性  報(bào)告異常信息的處理方式。對(duì)應(yīng)枚舉ExAlertType的值,只能取None/WebUI/WinUI
  • < LogHandler>節(jié)點(diǎn)  此節(jié)點(diǎn)為節(jié)點(diǎn)的子節(jié)點(diǎn),節(jié)點(diǎn)可以有0到若干個(gè)< LogHandler>子節(jié)點(diǎn)。
  • Type屬性  用于指定日志記錄處理器的類(lèi)。格式為Type=”ClassName,  AssemblyName”。該類(lèi)必須實(shí)現(xiàn)IExLogHandler接口。
  • ConnectionString屬性  該屬性是設(shè)置記錄異常日志的數(shù)據(jù)源位置。
  • DataTable屬性  設(shè)置記錄異常日志使用的表名。


ExManagement.Interface

包含了IExLogHandlerI Message兩個(gè)接口以及ExHandlerBase基類(lèi),可以通過(guò)實(shí)現(xiàn)這些接口來(lái)對(duì)框架進(jìn)行擴(kuò)展。如圖三-3
ExManagement.Interface.jpg

圖三-3

 

  以下是ExHandlerBase基類(lèi)中加載所有異常日志對(duì)象的方法:

public void LoadLogHandler(ExManagerConfig.ExHandlerConfig config)

{

     m_ExHandlerConfig = config;

     foreach (ExManagerConfig.LogHandlerConfig logConfig in config.LogConfigColletion)

     {

         object exLogHandler = System.Activator.CreateInstance(Type.GetType(logConfig.Type));

         lstLogHandler.Add(exLogHandler);

     }

}

  通過(guò)遍歷配置文件中該節(jié)包含的所有子節(jié)點(diǎn),并將配置中指定的LogHandler類(lèi)反射實(shí)例化,將對(duì)象存入隊(duì)列中。

  ExManagement.MessageHandler

  該包包含兩個(gè)IMessage接口的實(shí)現(xiàn),分別完成對(duì)異常信息在WinUIWebUI中的彈出提示功能。WinFormMessageWebMessage分別引用了System.Web.DllSystem. Windows.Forms.Dll。如圖三-4
ExManagement.MessageHandler.jpg

 

 

圖三-4

 

  ExManagement

  包含了ExManager類(lèi)和ErrorInfo類(lèi),是框架中核心的業(yè)務(wù)流程控制模塊。如圖三-5
ExManagement.jpg

圖三-5

 

  ErrorInfo類(lèi):根據(jù)ErrorId查詢(xún)對(duì)應(yīng)的ErrorString。在這個(gè)類(lèi)里,會(huì)根據(jù)在配置文件中節(jié)的值去指定的數(shù)據(jù)源(XML文件或者數(shù)據(jù)庫(kù))查詢(xún)。

  ExManager類(lèi),該類(lèi)是一個(gè)單例類(lèi),會(huì)在第一次實(shí)例化時(shí)獲取配置信息實(shí)體對(duì)象,并按照配置文件把所有指定的異常處理類(lèi)實(shí)例化后并存入一個(gè)哈希表中。以后實(shí)例化該類(lèi)都會(huì)重復(fù)使用之前實(shí)例化的該對(duì)象,避免反射造成的性能影響。通過(guò)調(diào)用該類(lèi)的ProcessException()方法將捕捉到的異常對(duì)象,錯(cuò)誤編號(hào),用來(lái)處理異常的異常處理器名(建議為該層的名稱(chēng))傳遞給框架,并按照參數(shù)從哈希表中取出對(duì)應(yīng)的異常處理對(duì)象,調(diào)用接口對(duì)異常進(jìn)行處理。

  ExManagement.Handler

  只包含一個(gè)默認(rèn)的異常處理器類(lèi):DefaultExHandler,它從ExHandlerBase基類(lèi)繼承。下面是該類(lèi)里最重要的ProcessExeception方法。

 

public override string ProcessExeception(Exception ex, string strUserId, string strErrorCode)

{

     // 記錄異常信息

     LogEx(ex, strUserId, strErrorCode);

 

     switch(m_ExHandlerConfig.ReturnMode)

     {

         // 返回類(lèi)型為錯(cuò)誤編碼

         case ExManagement.ExReturnMode.ErrorCode:

          {

              return strErrorCode;

          }

         // 返回類(lèi)型為詳細(xì)錯(cuò)誤信息(友好提示)

         case ExManagement.ExReturnMode.ErrorString:

          {

              return ExManagement.ExManager.GetErrorInfoByCode(strErrorCode);

          }

         // 返回類(lèi)型為詳細(xì)異常信息(Exception.Message

         case ExManagement.ExReturnMode.ExceptionString:

          {

              return ex.Message;

          }

         // 將異常向上拋出

         case ExManagement.ExReturnMode.Exception:

          {

              // 如果是該層自身引發(fā)的異常則包裝后拋出

              if(ex.GetBaseException() == ex)

              {

                   throw new Exception(string.Format("{0}層發(fā)生異常:{1}{2}",

                        m_ExHandlerConfig.Name, strErrorCode, ex.Message), ex);

              }

              // 若是捕捉到的是包裝后的異常(即上層拋出的)

              else

              {

                   throw ex;

              }

          }

         default:

          {

              return null;

          }

     }

}

  在這個(gè)默認(rèn)的異常處理類(lèi)的ProcessExeception方法中首先調(diào)用該類(lèi)中處理日志記錄的方法,再根據(jù)配置中的ExReturnMode決定返回處理的結(jié)果方式,對(duì)異常進(jìn)行處理。特別是當(dāng)設(shè)置為返回方式為Exception,即拋出異常對(duì)象時(shí)是先判斷該異常是否是最初發(fā)生的異常,還是已經(jīng)處理包裝過(guò)的異常,避免重復(fù)處理異常(不管異常是來(lái)自本層或者其他層)。

  ExManagement.LogHandler

  該包只有一個(gè)默認(rèn)的DefaultLogHandler類(lèi),實(shí)現(xiàn)了ILogHandler接口,它負(fù)責(zé)把異常信息記錄到數(shù)據(jù)庫(kù)中。

  我的項(xiàng)目中使用的各層配置文件(示例)

  BusinessLogicLayer

<ExManager ErrorCodeSource="DB" ConnectionString="Data Source=PDMDEV151.ITDEV.ZTE.COM.CN;user id=PDM;password=" DataTable="ErrorInfo">

     <ExHandler Name="BusinessLogicLayer" Type="ExManagement.Handler.DefaultExHandler, ExManagement.Handler" ReturnMode="Exception" AlertType="None"/>

         <LogHandler Type="ExManagement.LogHandler.DefaultLogHandler, ExManagement.LogHandler" ConnectionString="Data Source=PDMDEV151.ITDEV.ZTE.COM.CN;user id=PDM;password=" DataTable ="ExceptionLog"/>

     ExHandler>

ExManager>

   配置意義為:根據(jù)ErrorId到數(shù)據(jù)庫(kù)ErrorInfo庫(kù)中獲取ErrorString,定義了一個(gè)ExHandler,名為BusinessLogicLayer的框架默認(rèn)的異常處理類(lèi),異常返回方式為拋出異常對(duì)象,因?yàn)椴皇?span lang="EN-US">UI層,所以AlerTypeNone,該異常處理類(lèi)用一個(gè)默認(rèn)的LogHandler把異常日志記錄到數(shù)據(jù)庫(kù)ExceptionLog

   BusinessFacadeLayer

<ExManager ErrorCodeSource="DB" ConnectionString="Data Source=PDMDEV151.ITDEV.ZTE.COM.CN;user id=PDM;password=" DataBase="ErrorInfo">

     <ExHandler Name="BusinessFacadeLayer" Type="ExManagement.Handler.DefaultExHandler, ExManagement.Handler" ReturnMode="Exception" AlertType="None"/>

         <LogHandler Type="ExManagement.LogHandler.DefaultLogHandler, ExManagement.LogHandler" ConnectionString="Data Source=PDMDEV151.ITDEV.ZTE.COM.CN;user id=PDM;password=" DataTable ="ExceptionLog"/>

     ExHandler>

ExManager>

       該層配置除ExHandlerName不同外,與BusinessFacadeLayer的配置基本一致。

   WebUILayer

<ExManager ErrorCodeSource="DB" ConnectionString="Data Source=PDMDEV151.ITDEV.ZTE.COM.CN;user id=PDM;password=" DataBase="ErrorInfo">

     <ExHandler Name="WebUILayer" Type="ExManagement.Handler.DefaultExHandler, ExManagement.Handler" ReturnMode="ExceptionString" AlertType="WebUI"/>

         <LogHandler Type="ExManagement.LogHandler.DefaultLogHandler, ExManagement.LogHandler" ConnectionString="Data Source=PDMDEV151.ITDEV.ZTE.COM.CN;user id=PDM;password=" DataTable ="ExceptionLog"/>

     ExHandler>

ExManager>

       該層的異常處理器的ReturnMode方式為ExceptionString(即Exception.Message),彈出提示方式為WebUI

   WinUILayer

<ExManager ErrorCodeSource="DB" ConnectionString="Data Source=PDMDEV151.ITDEV.ZTE.COM.CN;user id=PDM;password=" DataBase="ErrorInfo">

     <ExHandler Name="WinUILayer" Type="ExManagement.Handler.DefaultExHandler, ExManagement.Handler" ReturnMode="ExceptionString" AlertType="WinUI"/>

         <LogHandler Type="ExManagement.LogHandler.DefaultLogHandler, ExManagement.LogHandler" ConnectionString="Data Source=PDMDEV151.ITDEV.ZTE.COM.CN;user id=PDM;password=" DataTable ="ExceptionLog"/>

     ExHandler>

ExManager>

       該層和WebUILayer的配置除AlertTypeWinUI方式外,基本一致。

   以上配置為開(kāi)發(fā)調(diào)試方式時(shí),若是在發(fā)布到測(cè)試或正式環(huán)境,只需要把WinUILayerWebUILayer中的ReturnMode屬性更改為ErrorString方式,即可讓用戶(hù)看到的是友好的錯(cuò)誤信息。

補(bǔ)充:WinUI項(xiàng)目的異常日志記錄器可以再增添一個(gè)本地異常Log文件方式,當(dāng)發(fā)生異常時(shí),可以根據(jù)用戶(hù)提供的Log文件進(jìn)行分析。

  項(xiàng)目中調(diào)用

  在寫(xiě)好配置文件之后,項(xiàng)目中引用ExManagement包。調(diào)用方法如下,項(xiàng)目中任何地方調(diào)用處理方式完全一致

// 返回值根據(jù)用戶(hù)配置而不同,可以為ErrorId, ErrorString以及ExceptionString

string strMessage;

try

{

     ;

}

catch(Exception ex)

{

     // 參數(shù)ex, 異常對(duì)象

     // 參數(shù)"BLL001", ErrorId, 即錯(cuò)誤編號(hào)

     // 參數(shù)"BusinessLogicLayer", ExHandlerName, 即異常處理器名稱(chēng), 建議于層名稱(chēng)對(duì)應(yīng)

     // 參數(shù)UserId, 即當(dāng)前用戶(hù)Id

     ProcessExeception(ex, "BLL0001", "BusinessLogicLayer", UserId);

}

四、效果評(píng)價(jià)

  可配置性。通過(guò)該異常處理框架可以方便的對(duì)異常處理進(jìn)行需要的配置。可配置的內(nèi)容:

  可以配置多個(gè)異常日志記錄以不同的方式記錄在不同的位置;

  異常處理方式可以有多種:拋出包裝后異常對(duì)象、 返回詳細(xì)的異常信息(調(diào)試用)、返回錯(cuò)誤提示信息(發(fā)布后給用戶(hù)看)以及錯(cuò)誤編號(hào);

  靈活性。建立在可配置性的基礎(chǔ)上,可以組合出多種異常處理方案,以滿(mǎn)足不同項(xiàng)目的特殊需要。

  開(kāi)放的可擴(kuò)展性。用戶(hù)可以自行實(shí)現(xiàn)框架提供的接口,自行擴(kuò)展異常處理以及異常日志記錄的類(lèi),以插件形式供框架調(diào)用,以實(shí)現(xiàn)最大可能的靈活性。

  性能。因?yàn)槭褂昧瞬簧俜瓷浼夹g(shù),在性能上有一定損耗,但使用了單例模式來(lái)彌補(bǔ),只在項(xiàng)目第一出現(xiàn)異常的時(shí)候反射加載對(duì)象,以后再次調(diào)用時(shí)則直接使用該對(duì)象,對(duì)效率基本沒(méi)有任何損耗了。

   而多數(shù)情況下,以框架提供的默認(rèn)解決方案已經(jīng)能夠滿(mǎn)足普通項(xiàng)目的需要,提供一個(gè)功能比較完整的,健壯的異常處理機(jī)制:

  1)        方便和簡(jiǎn)化了開(kāi)發(fā)人員及時(shí)定位和發(fā)現(xiàn)異常原因;

  2)        對(duì)系統(tǒng)運(yùn)行狀況提供了強(qiáng)有力的數(shù)據(jù)支持,并使錯(cuò)誤信息統(tǒng)一的方式管理,可以改善用戶(hù)體驗(yàn);

  3)        當(dāng)項(xiàng)目在用戶(hù)使用中發(fā)現(xiàn)運(yùn)行錯(cuò)誤時(shí),可以記下系統(tǒng)反饋的異常記錄編號(hào)后于項(xiàng)目開(kāi)發(fā)人員聯(lián)系,而開(kāi)發(fā)人員可以根據(jù)記錄編號(hào)得到異常發(fā)生的詳細(xì)信息進(jìn)行分析。有助于縮短項(xiàng)目異常反饋時(shí)間。

五、推廣建議

   該異常處理框架基本適合所有.NET項(xiàng)目,因?yàn)榭梢造`活的配置以適應(yīng)不同項(xiàng)目的具體需要。

  在一個(gè)項(xiàng)目推廣中,只需要有一個(gè)人比較深入的了解該異常處理框架的原理以及如何進(jìn)行配置和自定義擴(kuò)展開(kāi)發(fā),掌握時(shí)間大概只需要半天到一天時(shí)間。而項(xiàng)目中其他人員無(wú)須知道該框架的運(yùn)行機(jī)制,他們只需要在每個(gè)捕捉異常的地方用同樣的、唯一的方法調(diào)用框架即可。

   因?yàn)樵摽蚣軐?duì)于項(xiàng)目而言是高度聚合,低耦合的,對(duì)于項(xiàng)目而言不需要知道異常究竟會(huì)被如何處理,減少對(duì)項(xiàng)目的依賴(lài)。因此對(duì)于現(xiàn)有異常處理系統(tǒng)存在不足以及新項(xiàng)目是應(yīng)該大力推薦使用該框架進(jìn)行異常處理的,并且對(duì)現(xiàn)有項(xiàng)目的改造工作不大;當(dāng)然也可以選擇對(duì)項(xiàng)目已有部分不改動(dòng),新開(kāi)發(fā)部分進(jìn)行使用該框架進(jìn)行異常處理也是完全可以的。

  異常處理框架本身沒(méi)有做任何自身的異常情況處理,所以在采用框架的時(shí)候需要先按照預(yù)想的配置在模擬環(huán)境中進(jìn)行調(diào)試,確認(rèn)能夠正常運(yùn)行之后再加入到正式項(xiàng)目中去,避免在正式環(huán)境中出現(xiàn)框架本身異常無(wú)法判斷的情況。

當(dāng)然因?yàn)楫惓L幚淼目赡芊桨副容^多,該框架的第一個(gè)版本可能會(huì)有遺漏的可能,但因?yàn)榭蚣鼙旧淼牧己脭U(kuò)展性,多數(shù)的特殊情況應(yīng)該可以用戶(hù)自行擴(kuò)展解決。若有無(wú)法解決的可以和我聯(lián)系,對(duì)框架本身代碼做調(diào)整,以求完善該框架。

  另外,該異常處理框架若與最近討論比較熱門(mén)的AOPASPect Oriented Programming面向方面編程)思想結(jié)合可以最大程度使系統(tǒng)的業(yè)務(wù)代碼和系統(tǒng)異常處理代碼完全分離,并提供更為準(zhǔn)確的異常信息。因AOP技術(shù)目前在發(fā)展階段,并需要完全的純OOP項(xiàng)目中實(shí)施,暫不對(duì)此展開(kāi)討論。

it知識(shí)庫(kù)通用異常處理框架,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产福利小视频在线播放观看 | 午夜欧美 | 日本红怡院在线 | 久久国产乱子伦精品免费看 | 国产精品国内免费一区二区三区 | 一区二区三区四区精品 | 综合色播 | 婷婷激情四射网 | 国产精品美女一区二区 | 麻豆亚洲一区 | 黄网站在线免费 | 久久精品中文字幕久久 | 一区二区三区四区日韩 | 国产精品天天影视久久综合网 | 免费的美女色视频网站 | 久久久久青草大香线综合精品 | 色思思| 国产美女网站 | 成人视屏在线 | 久久lu| 亚洲 欧美 在线观看 | 国产成人精品magnet | 欧美激情a∨在线视频播放 欧美激情不卡 | 免费国产在线观看不卡 | 国产精品精品 | 桃花视频在线观看高清版mv | 黄色小视频免费在线观看 | 18女人腿打开无遮掩免费 | 国产高清www免费视频 | 成人最新午夜免费视频 | 久久精品中文字幕极品 | 国产午夜一级鲁丝片 | 岛国美女全棵写真视频在线观看 | 欧美激情一区二区三区中文字幕 | 五月婷婷丁香在线 | 久久免费精品国产72精品剧情 | 久久国产香蕉一区精品 | 日本精品国产 | 日本国产一区二区三区 | 不卡国产00高中生在线视频 | 91原创视频在线 |