2010-05-13 14 views
7

我有一個簡單的問題給你(我希望):)CRUD操作;你通知插入,更新等是否進展順利?

我對數據進行CRUD操作時幾乎總是使用void作爲「返回」類型。

例如,考慮以下代碼:

public void Insert(IAuctionItem item) { 
    if (item == null) { 
     AuctionLogger.LogException(new ArgumentNullException("item is null")); 
    } 

    _dataStore.DataContext.AuctionItems.InsertOnSubmit((AuctionItem)item); 
    _dataStore.DataContext.SubmitChanges(); 
} 

然後considen驗證碼:

public bool Insert(IAuctionItem item) { 
    if (item == null) { 
     AuctionLogger.LogException(new ArgumentNullException("item is null")); 
    } 

    _dataStore.DataContext.AuctionItems.InsertOnSubmit((AuctionItem)item); 
    _dataStore.DataContext.SubmitChanges(); 

    return true; 
} 

它實際上只是歸結到你是否需要通知的東西插入(並順利)或不?

回答

15

我通常會選擇第一個選項。

鑑於你的代碼,如果插入出現問題,將會拋出異常。

既然你周圍的數據訪問代碼中沒有try/catch塊,調用代碼將不得不處理這個異常......因此就會知道,如果都和失敗的原因。如果您剛剛返回true/false,調用代碼將不知道爲什麼出現故障(它可能會或可能不會在意)。

+0

你打了5秒給出相同的答案:-) – 2010-05-13 13:44:37

+0

此外,異常提供了更多的詳細信息,而不僅僅是「假」。 – 2010-05-13 13:49:09

+0

你是完全正確的。我確實需要在這裏嘗試/抓住。這只是爲了演示原因這個代碼。很好的答案! – danielovich 2010-05-13 13:59:46

0

我認爲這取決於。想象您的用戶想要在論壇上添加新帖子。由於某種原因,添加失敗,那麼如果你不告訴用戶,他們永遠不會知道有什麼問題。最好的辦法是用另一個異常給他們留下一個好消息

如果它與用戶沒有關係,並且你已經將它記錄到數據庫日誌中,那麼你不應該關心返回或不再有任何更多

0

我認爲如果操作順利,通知用戶是個好主意。無論您測試代碼的多少,並嘗試開箱即用,最有可能的是,在其存在過程中,軟件會遇到一個您無法解決的問題,從而導致其行爲不正確。就我而言,通知的使用允許用戶採取行動,如果程序失敗時您喜歡,可以使用某種計劃B.此操作可以是簡單的解決方法,也可以通知IT部門的人員,以便他們解決問題。 我寧願點擊額外的「確定」按鈕,而不是在發現錯誤時才發現問題。

1

我認爲這會更有意義,如果您在返回「false」的「item == null」的情況下。這將表明,您希望發生的情況不是很少,因此您不希望它引發異常,但調用代碼可以處理「錯誤」返回值。

由於它的標準,你會回到「真正的」,或者會是一個例外 - 這並不能真正幫助你多少。

0

你應該堅持無效,如果你需要更多的數據 - 它使用的變量,要麼你就需要具體的數據(它可以是多個號碼/串)和一個錯誤時拋出機制是一個很好的解決方案處理錯誤。

所以..如果你想知道,有多少行受到影響,如果SP返回的東西等... - 返回類型會限制你..

1

不打你恰好是在框架。如果你正在編寫C代碼,其中返回值是通信錯誤的最常見機制(因爲沒有更好的內置構造),那就使用它。

。NET基類庫使用異常來傳達錯誤,他們的缺席意味着一切都很好。因爲幾乎所有的代碼都使用BCL,所以大部分代碼都會寫入期望的異常,除非它到達一個類似C#的C庫,並且不支持Exceptions,否則每個調用都需要封裝在一個if(!myObject .DoSomething){System.Writeline(「Damn」);}塊。

對於下一個使用你的代碼的開發人員(在幾年後你可能已經忘記了你最初是怎麼做的),開始編寫所有調用代碼以利用作爲返回值傳遞的錯誤條件,作爲對輸出參數中的值的更改,作爲自定義事件,作爲回調,作爲要排隊的消息或任何其他可想象的方式來傳達故障或缺少故障。