2014-05-07 80 views
1

即時通訊使用CodeSmart 2013來分析我的VB6項目。 審查功能說我應該添加錯誤處理(或至少「錯誤恢復下一個」)我的類屬性。屬性中的VB6錯誤處理 - >最佳實踐?

我的特性通常是這樣的(在99%的情況下):

Public Property Let PLZ(ByVal strPlz As String) 
    myStrPLZ = strPlz 
End Property 

Public Property Get PLZ() As String 
    PLZ = myStrPLZ 
End Property 

當我自動添加錯誤處理它看起來像這樣:

Public Property Let PLZ(ByVal strPlz As String) 
    '<EhHeader> 
    On Error GoTo PLZ_Err 
    '</EhHeader> 
    myStrPLZ = strPlz 
    '<EhFooter> 
    Exit Property 

PLZ_Err: 
    MsgBox Err.Description & vbCrLf & _ 
      "in TNV.frmSucheTeilnehmer.PLZ " & _ 
      "at line " & Erl, _ 
      vbExclamation + vbOKOnly, "Application Error" 
    Resume Next 
    '</EhFooter> 
End Property 

Public Property Get PLZ() As String 
    '<EhHeader> 
    On Error GoTo PLZ_Err 
    '</EhHeader> 
    PLZ = myStrPLZ 
    '<EhFooter> 
    Exit Property 

PLZ_Err: 
    MsgBox Err.Description & vbCrLf & _ 
      "in TNV.frmSucheTeilnehmer.PLZ " & _ 
      "at line " & Erl, _ 
      vbExclamation + vbOKOnly, "Application Error" 
    Resume Next 
    '</EhFooter> 
End Property 

是任何人實際上在屬性中進行錯誤處理? 是最佳做法嗎?,因爲這將是我的項目很多額外的代碼(代碼概述減少恕我直言)

Thx求助! 來自德國的問候 SLimke

+0

爲什麼你必須添加一個錯誤處理一個簡單的任務?這裏會發生什麼錯誤? (只是想知道) – Hrqls

+1

這就是爲什麼我問。這樣簡單的屬性不會產生任何問題,不是嗎? – SLimke

+1

當屬性過程很細時(你甚至沒有在那裏分配對象引用)添加異常陷阱是荒謬的。只是爲了回過頭來提出另一個例外?我懷疑他們正試圖向您推銷另一種生成錯誤處理程序的工具。 – Bob77

回答

2

您應該像在任何方法(子/函數)中一樣添加錯誤處理。

我的經驗法則是,如果方法只有幾行,並且沒有任何異乎尋常的事情,那麼就不需要任何錯誤處理。同樣可以說一個屬性獲取/設置

是向所有屬性獲取器和設置器添加錯誤處理會生成大量代碼,因此一個選項可能是使用集中式錯誤處理。看到這個帖子的一些討論:Centralized error handling in VB6

+0

我不買它。這聽起來像另一個愚蠢的規則,旨在覆蓋低技能的編碼人員,如「將所有參考設置爲Nothing」。 – Bob77

+0

@ Bob77 - 你不準確買什麼? –

+0

您需要將錯誤陷印添加到不重要的屬性過程中。 – Bob77

0

爲什麼不使用公共字段,而不是這些樣板屬性?

Public PLZ As String 

如果您以後需要添加邏輯,沒問題!您可以將公共字段轉換爲屬性而不會破壞客戶端。

1

不要接受這些指導方針(特別是某人編寫的程序,他們自己認爲「最佳實踐」需要)。我從來沒有用過它,所以我不會說(我也不懷疑)它的質量......只是說。

MarkJ也是對的。如果您不需要對屬性設置進行任何驗證,那麼只需將它們設爲公共變量即可。如果您以後需要添加驗證,將它們變爲私有變量並使用公共屬性Get/Let/Set不會中斷接口,並且不需要其他代碼更改。

至於在每個類屬性中添加錯誤處理程序get/let?爲什麼?我個人認爲,如果有人打算使用我的課程,他們至少會花一點時間確保他們知道他們在做什麼以及如何使用它們。如果他們設置的屬性不正確,導致運行時(或編譯時)錯誤,那麼他們會立即知道。

如果設置該屬性的值是來自用戶,即

MyClass.SomeProperty = Input("Enter something: ") 

那麼我個人認爲錯誤代碼應放在那裏。即

On Error GoTo StupidUser 
MyClass.SomeProperty = Input("Enter something: ") 
Exit Sub 
ErrorHandler: 
    MsgBox "You did not supply a correct value!", vbExclamation 

否則,當你處理班級中的錯誤時,你會怎麼做?將它傳遞給一個集中的錯誤處理程序,它只會創建更多的代碼來跟蹤並最終得到相同的結果?用戶被通知/寫入日誌/等?

我(再次,親自...編程是不是黑白色&)喜歡把錯誤處理代碼在調用者常規 ...這是使用類,設置屬性的過程等

任何一種「代碼優化器/檢查器」都是由一個人或多個人編寫的,甚至是有信譽的人都會在使用它的人應該如何工作的問題上引起爭論。

TL; DR:一些建議可以安全地忽略。