我正在設計一個後臺辦公室網站,使管理員能夠管理內容,產品,價格等。我有兩個問題,我想在一個基類,每個頁面控制器(即代碼隱藏類)將延伸到解決,而這些都是:ViewState中的磁盤上在asp.net導致層次混亂的問題分離
- 存儲和
- 用戶驗證。
此外,我希望每個頁面控制器在設置事件處理程序,填充表單和保存數據時都遵循相同的設計。我想通過創建頁面控制器實現的抽象方法來解決這個問題。
現在,創建一個迎合ViewState存儲和用戶驗證的基類,並進一步定義瞭如何設置事件處理程序,何時設置事件處理程序,填充表單並將數據保留給我太多混亂。我喜歡高度分離的關注點,我傾向於創建三個基類:
System.Web.UI.Page
|
FileSystemStatePage:System.Web.UI.Page
(存儲ViewState)
|
SecurePage:FileSystemStatePage
(用戶驗證)
|
PageBase:SecurePage
(抽象,定義了用於設置事件處理程序,形式人口,節約方法)
現在我與關注點分離很高興,但我並不感到關於深的類層次結構。如果我發現自己需要用戶驗證而不是磁盤上的ViewState?所以...
...你們通常如何解決這些問題?
public class FileSystemStatePage : Page
{
protected override void SavePageStateToPersistenceMedium(object viewState)
{
// Serialize ViewState...
// Save to disk...
}
protected override object LoadPageStateFromPersistenceMedium()
{
// Read file content...
// Deserialize and return...
}
}
public class SecurePage : FileSystemStatePage
{
protected override void OnInit(EventArgs e)
{
if (!ValidateUser()) Response.Redirect("~/Login.aspx");
base.OnInit(e);
}
protected virtual bool ValidateUser()
{
return LoginHelper.LoggedInSystemUser != null;
}
}
public abstract class PageBase : SecurePage
{
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
SetEventHandlers();
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (!IsPostBack)
{
Populate();
}
}
protected abstract void SetEventHandlers();
protected abstract void Populate();
protected abstract void OnCancel(object sender, EventArgs e);
protected abstract void OnSave(object sender, EventArgs e);
}
當然,你是對的,儘管它至少增加了模塊性和代碼的重用。話雖如此,我會建議您進一步分離職能。謝謝回答。 – Marcus 2009-02-11 11:58:03