在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操作,只要存儲/獲取的鍵值保存一致即可。
用戶組件,也可以通過這樣類似的方式定義一個基類,以后所有自定義用戶組件,就很方便獲得用戶的身份信息了,如下代碼所示。
在窗體界面上,可以放置很多模塊,模塊通過窗體獲得用戶身份信息、角色信息等進行初始化的判斷
最終在主體界面中整合的是一個個模塊,每個模塊里面又有不同的窗體界面可供使用,但是都能通過緩存獲得用戶身份信息,數據處理起來就非常方便了。
對於業務報銷信息,我們可以根據用戶身份信息,迅速獲得對應的記錄列表,以及在修改的時候,記錄用戶的身份信息。
如新增一條主表記錄的時候,那么可以彈出一個新的界面進行數據的維護處理,界面如下所示。
或者類似下面的界面處理。