欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

再談異常處理try catch finally

 更新時(shí)間:2016年01月13日 11:24:01   作者:至軟  
這篇文章主要介紹了再談異常處理try catch finally 的相關(guān)資料,需要的朋友可以參考下

 1. 查找系統(tǒng)中壞味道的異常處理代碼

在上篇文章雜談異常處理try-catch-finally中主要詳細(xì)介紹了C#異常處理的概念,異常設(shè)計(jì)準(zhǔn)則,基礎(chǔ)知識(shí)等方面的內(nèi)容,但對如何正確使用異常處理印象還不是特別深刻吧。在這篇中,我通過查找以前系統(tǒng)代碼中存在壞味道的異常處理代碼來分析和講解如何正確使用異常處理。

1.1. 例一

/// <summary>
/// 保存記錄
/// </summary>
/// <param name="entity">實(shí)體</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;
}

代碼在異常設(shè)計(jì)是不是與“如果了解特定異常在給定上下文中引發(fā)的條件,請考慮捕捉這些異常?!被颉安蹲讲⒃俅我l(fā)異常時(shí),首選使用空引發(fā)。這是保留異常調(diào)用堆棧的最佳方式。”的要求不太相符合呢?把throw ex;改成throw;或throw new RepositoryLayerException("保存記錄發(fā)生錯(cuò)誤!", ex);是不是符合上面兩條異常設(shè)計(jì)準(zhǔn)則了呢?

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;
}

領(lǐng)域?qū)哟a

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是一個(gè)文本框控件,如果XXName文本框輸入的值經(jīng)常超過200個(gè)字符,會(huì)不停的彈出錯(cuò)誤消息框,這樣是不是會(huì)引起效率問題,涉及到效率問題我們會(huì)想到什么,對了就是Tester-Doer 模式,呵呵,在這里我們怎么應(yīng)用這個(gè)模式呢?其實(shí)很簡單,我們只要設(shè)置this.XXName.MaxLength = 200;是不是就解決了這個(gè)問題?

1.3. 思考總結(jié)

認(rèn)真去分析,會(huì)發(fā)現(xiàn)在系統(tǒng)中壞味道的代碼還真不少,原來在異常處理中自認(rèn)為比較正確的做法,比較優(yōu)美的做法發(fā)現(xiàn)都是存在問題的。經(jīng)過這幾天對異常處理的系統(tǒng)學(xué)習(xí)研究,對系統(tǒng)中不好做法的異常處理進(jìn)行排查,還是學(xué)到了不少知識(shí),也發(fā)現(xiàn)自己的不足,原來很多基礎(chǔ)技術(shù)知識(shí)還可以更上一層樓。

相關(guān)閱讀:雜談try-catch-finally異常處理,非常感謝大家一直以來對腳本之家網(wǎng)站的支持。

相關(guān)文章

  • WPF中下拉框可作選擇項(xiàng)也可以作為只讀文本框使用的方法

    WPF中下拉框可作選擇項(xiàng)也可以作為只讀文本框使用的方法

    這篇文章主要給大家介紹了關(guān)于WPF中下拉框可以選擇項(xiàng)也可以作為只讀文本框使用的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-02-02
  • C#引用類型作為方法的參數(shù)分析

    C#引用類型作為方法的參數(shù)分析

    這篇文章主要介紹了C#引用類型作為方法的參數(shù)分析,以實(shí)例的形式較為詳細(xì)的分析了參數(shù)的傳值問題,需要的朋友可以參考下
    2014-11-11
  • C#獲取真實(shí)IP地址(IP轉(zhuǎn)為長整形、判斷是否內(nèi)網(wǎng)IP的方法)

    C#獲取真實(shí)IP地址(IP轉(zhuǎn)為長整形、判斷是否內(nèi)網(wǎng)IP的方法)

    這篇文章主要介紹了C#獲取真實(shí)IP地址的實(shí)現(xiàn)代碼,包含把IP轉(zhuǎn)為長整形、判斷是否是私網(wǎng)、內(nèi)網(wǎng)IP的方法,需要的朋友可以參考下
    2014-08-08
  • 分享一個(gè)C#編寫簡單的聊天程序(詳細(xì)介紹)

    分享一個(gè)C#編寫簡單的聊天程序(詳細(xì)介紹)

    這是一篇基于Socket進(jìn)行網(wǎng)絡(luò)編程的入門文章,我對于網(wǎng)絡(luò)編程的學(xué)習(xí)并不夠深入,這篇文章是對于自己知識(shí)的一個(gè)鞏固,同時(shí)希望能為初學(xué)的朋友提供一點(diǎn)參考。文章大體分為四個(gè)部分:程序的分析與設(shè)計(jì)、C#網(wǎng)絡(luò)編程基礎(chǔ)(篇外篇)、聊天程序的實(shí)現(xiàn)模式、程序?qū)崿F(xiàn)
    2015-12-12
  • C# log4net日志庫的用法小結(jié)

    C# log4net日志庫的用法小結(jié)

    log4net日志開源庫是用來控制日志文件大小,日志文件個(gè)數(shù),滾動(dòng)式覆蓋,自由控制日志打印等級,今天通過本文給大家介紹C# log4net日志庫的用法小結(jié),感興趣的朋友一起看看吧
    2021-10-10
  • C#實(shí)現(xiàn)文件與Base64的相互轉(zhuǎn)換

    C#實(shí)現(xiàn)文件與Base64的相互轉(zhuǎn)換

    本文主要介紹了C#實(shí)現(xiàn)文件與Base64的相互轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 支持windows與linux的php計(jì)劃任務(wù)的實(shí)現(xiàn)方法

    支持windows與linux的php計(jì)劃任務(wù)的實(shí)現(xiàn)方法

    這篇文章主要介紹了支持windows與linux的php計(jì)劃任務(wù)的實(shí)現(xiàn)方法,較為詳細(xì)的講述了php計(jì)劃任務(wù)中涉及到的php程序?qū)崿F(xiàn)方法、Windows計(jì)劃任務(wù)實(shí)現(xiàn)方法等,需要的朋友可以參考下
    2014-11-11
  • .NET創(chuàng)建、刪除、復(fù)制文件夾及其子文件的實(shí)例方法

    .NET創(chuàng)建、刪除、復(fù)制文件夾及其子文件的實(shí)例方法

    .NET創(chuàng)建、刪除、復(fù)制文件夾及其子文件的實(shí)例方法,需要的朋友可以參考一下
    2013-03-03
  • C#/VB.NET實(shí)現(xiàn)創(chuàng)建PDF/UA文件的示例代碼

    C#/VB.NET實(shí)現(xiàn)創(chuàng)建PDF/UA文件的示例代碼

    PDF/UA,即Universally?Accessible?PDF,該格式的PDF文件是于2012年8月以ISO標(biāo)準(zhǔn)14289-1發(fā)布的、具有普遍可訪問的PDF文檔標(biāo)準(zhǔn)。本文將用C#實(shí)現(xiàn)DF/UA文件的創(chuàng)建,需要的可以參考一下
    2022-08-08
  • WinForm中BackgroundWorker控件用法簡單實(shí)例

    WinForm中BackgroundWorker控件用法簡單實(shí)例

    這篇文章主要介紹了WinForm中BackgroundWorker控件用法,以一個(gè)簡單實(shí)例形式分析了BackgroundWorker控件的定義、設(shè)置及使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08

最新評論