在Winform開發中,有時候為了方便,需要把窗體的一些常規性的資料和操作函式進行封裝,通過自定義基類窗體的方式,可以實現這些封裝管理,讓我們的框架統一化、簡單化的處理一些常規性的操作,如這裡介紹的使用者身份資訊的快取和提取。通過基類的封裝,可以大大減少常規性的程式碼,這個也是基類封裝的目的所在。

1、使用者登入獲得身份資訊並快取

使用者登入介面,通過獲得使用者的賬號密碼進行登入驗證,如下介面所示。

登入過程如下所示,成功後獲得使用者的身份資訊並快取起來待用,畢竟系統介面,大多數都需要獲得使用者的資訊的。

獲得使用者的身份資訊後,呼叫SetLoginInfo設定快取資料,以備後用。

通過上面的處理,使用者身份資訊,許可權資訊,角色資訊,都可以一次性獲得,供各個介面上使用了。

2、基類窗體的使用者身份提取

這裡的LoginUserInfo是窗體基類的一個屬性,這個屬性通過兩種方式獲得,一個是通過使用者在呼叫窗體顯示前進行指定,一種是通過基類自動把快取裡面的使用者物件賦值。

如下面的程式碼就是介面基類BaseForm的部分程式碼。

namespace WHC.Framework.BaseUI
{
/// <summary>
/// 常規介面基類
/// </summary>
public partial class BaseForm : DevExpress.XtraEditors.XtraForm, IFunction
{
public event EventHandler OnDataSaved;//子窗體資料儲存的觸發 public BaseForm()
{
InitializeComponent(); //為了保證一些介面控制元件的許可權控制和身份確認,以及簡化操作,在介面初始化的時候,從快取裡面內容(如果存在的話)
//繼承的子模組,也可以通過InitFunction()進行指定使用者相關資訊
this.LoginUserInfo = Cache.Instance["LoginUserInfo"] as LoginUserInfo;
this.FunctionDict = Cache.Instance["FunctionDict"] as Dictionary<string, string>;
}

這樣介面基類例項化的時候,就會自動獲取使用者資訊了,這個操作類似於Web領域裡面的Session操作,只要儲存/獲取的鍵值儲存一致即可。

使用者元件,也可以通過這樣類似的方式定義一個基類,以後所有自定義使用者元件,就很方便獲得使用者的身份資訊了,如下程式碼所示。

在窗體介面上,可以放置很多模組,模組通過窗體獲得使用者身份資訊、角色資訊等進行初始化的判斷

最終在主體介面中整合的是一個個模組,每個模組裡面又有不同的窗體介面可供使用,但是都能通過快取獲得使用者身份資訊,資料處理起來就非常方便了。

對於業務報銷資訊,我們可以根據使用者身份資訊,迅速獲得對應的記錄列表,以及在修改的時候,記錄使用者的身份資訊。

如新增一條主表記錄的時候,那麼可以彈出一個新的介面進行資料的維護處理,介面如下所示。

或者類似下面的介面處理。