0

我指的是以下幾點:在禁用的GUI選項中添加額外檢查是否是一種好的做法?

void setup_gui() 
{ 
    if (some_condition) 
     some_button.disable(); 

    ... 
} 

void some_button_click() 
{ 
    // Is this a good practice? 
    if (some_condition) 
     return; 

    ... 
} 

並稱,檢查確保該程序將無法運行操作,但它也可以被看作是隱藏的錯誤(some_button_click()必須未在運行所有)。

那麼,你怎麼看待它呢?這是一個安全的編碼實踐或隱藏錯誤?

回答

2

防守性編程與防禦性駕駛一樣合理。

從單獨關注的角度考慮這可能會有幫助。一個關注點是演示。另一個可能是一組業務規則。在兩個地方進行同樣的檢查是合理的。

您想在表示層進行檢查以與用戶進行通信。

您可能還需要使表現層下面的檢查:

  • 爲了預防在表示層現在和未來的錯誤。
  • 如果表示層下面的代碼在別處被重新使用。
  • [來自mvds的評論]如果情況可能會改變,因爲控制啓用或禁用。

編輯:大衛赫弗南的下面DRY關注可以通過平凡中限定條件只有一次,和其他地方訪問它來解決。

void setup_gui() 
{ 
    some_button.setEnabled(context.isThisActionAvailable()); 

    ... 
} 

void some_button_click() 
{ 
    if (context.isThisActionAvailable()) 
     return; 

    ... 
} 
+1

+1這個現實的答案。考慮一下網頁設計,在那裏你可以隱藏一些控件:在這種情況下,再次檢查動作執行時是非常合理的,因爲服務器/會話狀態可能已經改變(無論出於何種原因)。在獨立應用程序開發中,這些例子並不是那麼簡單,但您可能並不總是完全相信每一個可以想象的狀態轉換都會被您的代碼所捕獲,並且在一些罕見的情況下,該按鈕會被意外啓用。 – mvds 2011-01-05 15:53:49

+0

我必須補充一點:防禦性編碼也意味着存儲狀態(在Nib,佈局xml或其他存儲GUI的方式中)默認情況下禁用了所有的功能,並且'setup_gui()'只支持*元素。 – mvds 2011-01-05 15:55:16

+0

這是更好的,但我仍然認爲最好的解決方案是有一個可行的GUI框架。把它看作是一個GUI框架而不是GUI框架 - 不工作! – 2011-01-05 16:08:32

0

它可以被認爲是安全編碼,它也可以被認爲是隱藏一個錯誤。這時候你可能應該重新評估你的程序邏輯。如果可能的話,代碼冗餘是最好避免的。如果您的程序可以以不需要檢查兩次的方式構建,那麼確保程序的實際邏輯正常並按預期正常工作會更好。

當然,如果你急着這是一個快速解決方案,它的工作原理,但它反映了程序中其他地方的糟糕設計和/或邏輯。

1

我不帶這個腰帶大括號的方法。問題在於你違反了DRY原則,並且使用了some_condition。在一個地方而不是另一個地方改變這一切很容易。

當然some_condition在這個製作的例子中非常簡單,但實際上它通常要複雜得多。

如果您不能相信您的GUI框架在您請求阻止操作時阻止操作,那麼您需要修復該框架。

0

some_button_click()中的無聲返回可能隱藏了一個錯誤。我要麼根本不做檢查,要麼大聲暴躁地崩潰。

相關問題