国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

再談異常處理try catch finally

2019-10-29 21:33:51
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了再談異常處理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. 思考總結

認真去分析,會發現在系統中壞味道的代碼還真不少,原來在異常處理中自認為比較正確的做法,比較優美的做法發現都是存在問題的。經過這幾天對異常處理的系統學習研究,對系統中不好做法的異常處理進行排查,還是學到了不少知識,也發現自己的不足,原來很多基礎技術知識還可以更上一層樓。



注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 中宁县| 观塘区| 登封市| 湘潭县| 西华县| 太仆寺旗| 秀山| 钟祥市| 崇州市| 武宣县| 沂水县| 扎兰屯市| 台山市| 邵武市| 龙游县| 曲麻莱县| 张家口市| 城固县| 德化县| 钟山县| 锡林浩特市| 封开县| 岗巴县| 大新县| 皋兰县| 曲麻莱县| 梅河口市| 神农架林区| 乌拉特中旗| 江陵县| 罗定市| 汉寿县| 青冈县| 瑞金市| 衡阳县| 铁力市| 烟台市| 安仁县| 镇安县| 淳化县| 旬邑县|