通用異常處理框架

發表于:2014-04-28來源:博客園作者:風語者·疾風點擊數: 標簽:
異常捕捉、處理是每個項目中必不可少的一部分,利用反射和XML配置技術實現一個通用的、靈活的、可配置的、高度可自擴展的異常處理框架對項目的整體健壯性以及異常處理效率都是非常重要的。通用異常處理框架中需要提供配置信息的支持以及統一的異常處理類和

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

  一、問題的提出

  由于異常處理在項目中的普遍性,我們會很自然的想到是否可以對異常處理模塊進行提取為公用模塊,加強項目間的復用,提高項目的開發進度。并且在異常處理中,因為沒有良好的異常處理系統可能造成一些問題:

  若異常處理方式不當,容易造成比較嚴重的性能問題。

  在項目開發階段,開發人員需要得到完整的異常錯誤信息方便分析BUG;在項目發布階段,用戶希望看到的是比較友好的錯誤信息。一個良好的異常處理系統應能夠通過簡單的配置方便的達到這樣的效果

  異常處理系統應該能夠提供足夠的信息方便開發人員對BUG異常的準確定位,減少查找BUG產生原因的時間。(該問題在自己的項目中有過深刻教訓:因項目中異常信息的不準確,導致一個BUG消耗大量人力時間)

  一個項目中各層對異常處理的方式不同,可能會不同的層編寫不同的代碼,造成代碼使用麻煩以及復用性低,若需修改,可能改動較大。(例如PDM項目中,除UI層外,都是對異常進行包裝后拋給上一層捕捉;而UI層需要處理記錄異常,并反饋給用戶;即便是UI層也應WebUI和WinUI采用的不同的方式實現,提供給項目的接口也都有一定區別,增加了編碼的復雜程度)

  異常報告信息沒有統一管理。很多項目中報告給用戶的錯誤消息,都是程序員在開發中自己編寫的,對用戶而言,常常不是有效的友好的提示信息。集中管理后可以由BA來進行錯誤信息的整理,改善用戶體驗。

  異常記錄方式可能會在不同環境有不同的處理,應該能通過配置文件簡單的實現,而不必每次為不同的應用編寫代碼。

  要把異常系統做成一個通用的框架,存在一個比較大的挑戰:不同的項目可能因項目的整體構架不同,對異常處理方式會有不同的需求,如何保持通用異常處理框架的靈活性的同時實現復用以及可配置性。

  二、解決思路

  為了最大程度實現異常處理框架的通用性、可擴展性以及可配置性,采用配置文件結合動態加載插件的方式:框架提供接口,由不同項目根據自己的需要實現接口,完成對異常的處理,以及異常日志的記錄;而框架再根據配置信息決定異常處理在不同的情況下的處理策略,并通過調用用戶實現的接口來完成異常處理過程。

  整個異常處理過程對項目調用高度封裝,項目中不論任何地方,只需調用一個唯一的接口,框架就會根據配置信息執行需要的異常處理。

  三、實踐情況

  整體結構

  框架主要由ExManagement.Config、ExManagement.Interface、ExManagement.MessageHandler以及ExManagement構成。如圖:三-1

  ExManagement.Config:用于從配置文件中獲取配置信息,并將配置信息轉換為一個配置信息實體對象,提供給框架的其他部分使用。

  ExManagement.Interface:提供異常處理類、異常日志記錄類以及異常錯誤報告類的接口和基類,便于用戶在框架的基礎上進行自定義的擴展

  ExManagement.MessageHandler:對ExManagement.Interface中的IMessage接口實現,提供了WebUI和WinUI下的彈出錯誤信息提示的支持。也可以直接編寫一個滿足IMessage接口的包,以自己需要的方式彈出錯誤提示信息。

  ExManagement:是控制和管理框架按照配置信息進行處理的控制類。首先根據異常處理配置加載需要的異常處理類和日志記錄類,再按照配置信息內容對異常進行處理。并提供唯一的接口供項目調用。

  ExManagement.Handler:默認的異常處理包,包含了一種對異常處理的具體實現。用戶也可以繼承ExManagement.Interface中的ExHandlerBase基類,實現自定義的異常處理類,并通過修改配置文件讓框架調用。

  ExManagement.LogHandler:默認日志記錄包,包含一種將異常日志記錄到數據庫的具體實現。用戶也可以實現ExManagement.Interface中的ILogHandler接口,實現自定義的異常處理類,并通過修改配置文件讓框架調用。

Package.JPG

  圖三-1

  ExManagement.Config包

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

  ExManagerConfig類中又定義了3個嵌入類:ExHandlerConfig、LogHandlerConfig、LogHandlerConfigCollection以及三個枚舉ExAlertType、ErrorCodeSource、ExReturnMode。ExManagerConfig,ExHandlerConfig、LogHandlerConfig分別對應配置文件中的 、 、 節點。ExManagerConfig是一個集合類,從System.Collections.CollectionBase繼承,包含若干個ExHandlerConfig對象,并通過索引器訪問包含的ExHandlerConfig對象,支持以int和string兩種方式索引。ExHandlerConfig中除了包含對應節的屬性外,還包含一個LogHandlerConfigCollection對象,是LogHandler類的集合類。

ExManagement.Config.jpg

  圖三-2

  ExSectionHandler類從配置文件中按照固定的格式獲取到相應的配置信息,并將信息填充到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>

原文轉自:http://kb.cnblogs.com/page/81682/

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97