2009-12-27 29 views
1

我有一個對話框,認證對話框,這將在我的應用程序的不同部分需要。在程序的不同點上能夠有效地調用對話框及其背後的邏輯(分離類)的最佳設計實踐是什麼?在程序的不同部分需要對話框 - 設計

EG:

用戶啓動程序 - 需要登錄

用戶想要觀看加密數據 - 密碼的確認需要

用戶想要改變密碼 - 確認要求的當前密碼的。

那麼實現這個的好方法是什麼?

歡迎任何建議?

回答

1

也許不是最簡單的解決方案來實現,但你可以看看使用Aspect Oriented Programming。然後您可以註釋每個需要用戶登錄的方法。這使得代碼乾淨可讀。

[ConfirmUser(ErrorMethod=... RequireUsername=false, RequirePassword=true)] 
public void ViewData() 
{ 
    // your code 
} 

AOP框架將編織所需的代碼來處理您的方法中的用戶確認。

還是做同樣的事情手動方法裏面:

public void ViewData() 
{ 
    ConfirmUser(); 
    // your code 
} 

public void ConfirmUser() 
{ 
    if(!DoLoginPage()) throw new SecurityException("Incorrect credentials"); 
} 

你可以有ConfirmUser返回一個布爾值,而不是例外的。這是另一個討論,並取決於您的應用程序。如果您在較低的代碼層中拒絕操作,則需要執行異常。 try/catch讓你把錯誤處理放在函數的底部,而返回的bool需要並且if語句在最上面。

public void ViewData() 
{ 
    try 
    { 
    ConfirmUser(); 
    // your code 
    } 
    catch(SecurityException) 
    { 
    //handle error 
    } 
} 

VS

public void ViewData() 
{ 
    if(!ConfirmUser()) 
    { 
     //handle error 
     return; 
    } 
    // your code 
} 

你可以同時實現ConfirmUser和ConfirmPassword,或兩者與參數,也許是一個枚舉說你需要驗證一下同樣的方法都有。

[Flags] 
public enum Requires 
{ 
    Username, 
    Password 
} 

public bool ConfirmUser(Requires requiresField) 
{ 
} 
1

一種方法可以是創建「用戶認證」方法。

所以當以往任何時候都需要檢查用戶是否被允許執行請求的操作您撥打電話:

if (UserAuthenticated()) 
{ 
    // Perform action 
} 

此方法將保存用戶的詳細信息,並提示輸入密碼,並檢查他們反對數據庫。如果細節匹配,則返回true並繼續。

在啓動時不會設置用戶名,所以對話框也可以提示。

這是aspect orientated programmingcross-cutting concerns的示例。

0

一般來說,與設計任何其他可重用類相比,設計可重用表單沒有真正的區別 - 將要重用的類放入一個或多個程序集中,並從要重用它們的位置引用它們。這適用於Forms以及任何其他可重用類。

如果您需要根據您調用的上下文略有不同的功能,可以編寫相應的構造函數,或者在顯示對話框之前通過適當的方法初始化對話框。

相關問題