色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

通用異常處理框架

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

  一、問題的提出

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

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

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

 Package.JPG

圖三-1

  ExManagement.Config

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

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

圖三-2

 

  ExSectionHandler類從配置文件中按照固定的格式獲取到相應(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類來處理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ù)庫的連接字符串。
  • DataTable屬性  設(shè)置記錄異常日志使用的表名。
  • 節(jié)點(diǎn)  此節(jié)點(diǎn)為 節(jié)點(diǎn)的子節(jié)點(diǎn),至少得有一個(gè)以上的子節(jié)點(diǎn)。包含NameTypeReturnMode以及AlertType屬性。
  • Name屬性  為該異常處理器確定一個(gè)名稱。在項(xiàng)目中調(diào)用異常處理方法時(shí),需要指定這個(gè)名稱。一般建議用層的名字或者項(xiàng)目的名字。
  • Type屬性  指定異常處理器的類,格式為Type=”ClassName,  AssemblyName”。該類必須從ExHandlerBase繼承。
  • ReturnMode屬性  異常處理器處理后返回給項(xiàng)目的值類型。對(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屬性  用于指定日志記錄處理器的類。格式為Type=”ClassName,  AssemblyName”。該類必須實(shí)現(xiàn)IExLogHandler接口。
  • ConnectionString屬性  該屬性是設(shè)置記錄異常日志的數(shù)據(jù)源位置。
  • DataTable屬性  設(shè)置記錄異常日志使用的表名。


ExManagement.Interface

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

圖三-3

 

  以下是ExHandlerBase基類中加載所有異常日志對(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);

     }

}

  通過遍歷配置文件中該節(jié)包含的所有子節(jié)點(diǎn),并將配置中指定的LogHandler類反射實(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類和ErrorInfo類,是框架中核心的業(yè)務(wù)流程控制模塊。如圖三-5
ExManagement.jpg

圖三-5

 

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

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

  ExManagement.Handler

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

 

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

{

     // 記錄異常信息

     LogEx(ex, strUserId, strErrorCode);

 

     switch(m_ExHandlerConfig.ReturnMode)

     {

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

         case ExManagement.ExReturnMode.ErrorCode:

          {

              return strErrorCode;

          }

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

         case ExManagement.ExReturnMode.ErrorString:

          {

              return ExManagement.ExManager.GetErrorInfoByCode(strErrorCode);

          }

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

  ExManagement.LogHandler

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

  我的項(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ù)庫ErrorInfo庫中獲取ErrorString,定義了一個(gè)ExHandler,名為BusinessLogicLayer的框架默認(rèn)的異常處理類,異常返回方式為拋出異常對(duì)象,因?yàn)椴皇?span lang="EN-US">UI層,所以AlerTypeNone,該異常處理類用一個(gè)默認(rèn)的LogHandler把異常日志記錄到數(shù)據(jù)庫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方式外,基本一致。

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

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

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

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

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

string strMessage;

try

{

     ;

}

catch(Exception ex)

{

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

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

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

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

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

}

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

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

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

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

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

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

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

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

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

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

  3)        當(dāng)項(xiàng)目在用戶使用中發(fā)現(xiàn)運(yùn)行錯(cuò)誤時(shí),可以記下系統(tǒng)反饋的異常記錄編號(hào)后于項(xiàng)目開發(fā)人員聯(lián)系,而開發(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ò)展開發(fā),掌握時(shí)間大概只需要半天到一天時(shí)間。而項(xiàng)目中其他人員無須知道該框架的運(yùn)行機(jī)制,他們只需要在每個(gè)捕捉異常的地方用同樣的、唯一的方法調(diào)用框架即可。

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

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

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

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

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

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

主站蜘蛛池模板: 宾阳县| 神木县| 名山县| 天峨县| 台前县| 连州市| 彩票| 宁阳县| 班戈县| 曲阳县| 成安县| 鄂尔多斯市| 镇远县| 乃东县| 武冈市| 紫金县| 宁海县| 广西| 凤凰县| 青田县| 碌曲县| 南靖县| 北宁市| 陆河县| 吉林省| 二手房| 金昌市| 奈曼旗| 天门市| 思南县| 娱乐| 政和县| 腾冲县| 云林县| 伊金霍洛旗| 七台河市| 疏附县| 榆林市| 井研县| 南靖县| 定襄县|