再談異常處置try catch finally。本站提示廣大學習愛好者:(再談異常處置try catch finally)文章只能為提供參考,不一定能成為您想要的結果。以下是再談異常處置try catch finally正文
1. 查找體系中壞滋味的異常處置代碼
在上篇文章雜談異常處置try-catch-finally中重要具體引見了C#異常處置的概念,異常設計原則,基本常識等方面的內容,但對若何准確應用異常處置印象還不是特殊深入吧。在這篇中,我經由過程查找之前體系代碼中存在壞滋味的異常處置代碼來剖析和講授若何准確應用異常處置。
1.1. 例一
/// <summary> /// 保留記載 /// </summary> /// <param name="entity">實體</param> public virtual object Save(T entity) { ISession session = NHibernateUtils.GetCurrentSession(); ITransaction tx = null; try { tx = session.BeginTransaction(); object id = session.Save(entity); tx.Commit(); return id; } catch (HibernateException ex) { if (tx != null) tx.Rollback(); throw ex; } finally { NHibernateUtils.CloseSession(); } }
下面代碼中個中
catch (HibernateException ex) { if (tx != null) tx.Rollback(); throw ex; }
代碼在異常設計是否是與“假如懂得特定異常在給定高低文中激發的前提,請斟酌捕獲這些異常。”或“捕獲並再次激發異常時,首選應用空激發。這是保存異常挪用客棧的最好方法。”的請求不太符合合呢?把throw ex;改成throw;或throw new RepositoryLayerException("保留記載產生毛病!", ex);是否是相符下面兩條異常設計原則了呢?
1.2. 例二
表現層代碼
try { Cursor = Cursors.WaitCursor; IApplicationContext ctx = ContextRegistry.GetContext(); IStoreRepository storeRepository = ctx.GetObject("StoreRepository") as IStoreRepository; StoreInfo store = Store; store.Name = XXName.Text.Trim(); storeRepository.Save(store); } catch (Exception ex) { ShowMessageBox(ex, MessageLevel.Error); } finally { Cursor = Cursors.Arrow; }
范疇層代碼
private string _name; /// <summary> /// 商號稱號 /// </summary> public virtual string Name { set { if (string.IsNullOrEmpty(value)) { throw new ArgumentNullException("value", "商號稱號不克不及為空!"); } if (ValidationUtils.GetLength(value,CharacterType.NVarChar) > 200) { throw new ArgumentOutOfRangeException("value", "商號稱號不克不及年夜於200!"); } _name = value; } get { return _name; } }
在這裡須要解釋一下,個中XXName是一個文本框控件,假如XXName文本框輸出的值常常跨越200個字符,會一直的彈失足誤新聞框,如許是否是會惹起效力成績,觸及到效力成績我們會想到甚麼,對了就是Tester-Doer 形式,呵呵,在這裡我們怎樣運用這個形式呢?其實很簡略,我們只需設置this.XXName.MaxLength = 200;是否是就處理了這個成績?
1.3. 思慮總結
賣力去剖析,會發明在體系中壞滋味的代碼還真很多,本來在異常處置中自以為比擬准確的做法,比擬幽美的做法發明都是存在成績的。經由這幾天對異常處置的體系進修研討,對體系中欠好做法的異常處置停止排查,照樣學到了很多常識,也發明本身的缺乏,本來許多基本技巧常識還可以更上一層樓。
相干浏覽:雜談try-catch-finally異常處置,異常感激年夜家一向以來對網站的支撐。