【類圖】
【命名空間】——————————————————【文件截圖】
可能您會(huì)問,不就是弄個(gè)父類嗎,怎么又是這么復(fù)雜呢?這個(gè)嘛,聽我慢慢道來。
(類圖里面Tree、Main1、DataDelete1、DataForm1、DataList1不是父類,而是共用頁面)
這個(gè)是依據(jù)自然框架的特點(diǎn)來設(shè)置的,目的就是把共用的代碼都放到父類里面,減輕子類的代碼量。就是最大限度的避免冗余代碼,就是說相同的代碼只出現(xiàn)在一處!
如果只設(shè)置一個(gè)父類,不能滿足不同的需求,所以就根據(jù)不同的需求,設(shè)置了多級(jí)的父類。
1、 BasePage 。 public class BasePage : System.Web.UI.Page {}
這個(gè)就是為了定義數(shù)據(jù)訪問函數(shù)庫的實(shí)例,用于訪問數(shù)據(jù)庫。在OnUnload的時(shí)候進(jìn)行一下收尾工作。
我的想法就是,一個(gè)用戶在一次訪問周期里,只使用一個(gè)訪問數(shù)據(jù)庫的實(shí)例。特殊情況除外。因?yàn)槲易约簩懙臄?shù)據(jù)訪問函數(shù)庫不是靜態(tài)函數(shù)的,使用前必須先new一下,而每次用的時(shí)候都要new比較麻煩,所以就放在父類里面了。
2、 PagePermission。 public class PagePermission : BasePage
這里是做權(quán)限驗(yàn)證用的,首先要驗(yàn)證用戶是否登錄,如果沒有登錄那還談什么權(quán)限呀。然后是兩個(gè)函數(shù),一個(gè)是驗(yàn)證當(dāng)前用戶是否可以訪問指定的FunctionID(功能節(jié)點(diǎn)ID),另一個(gè)是驗(yàn)證當(dāng)前用戶是否可以訪問指定的ButtonID(功能按鈕ID)。這兩個(gè)函數(shù)并不是在這里被調(diào)用,而是給子類準(zhǔn)備的。
3、 PageURL。public class PageURL : PagePermission
這里面要處理URL傳遞過來的參數(shù)。在自然框架里面大部分頁面都要傳遞FunctionID,表單頁面都要傳遞ButtonID、DataID,一些頁面還需要傳遞ForeignID(外鍵)、DepartmentID(部門ID)。URL傳遞過來的,那么首先就要先接收下來,然后要進(jìn)行驗(yàn)證以避免SQL注入攻擊。
這些工作就要在這里完成了。
(再往下就有分支了)
4、 BasePageList。 public partial class BasePageList : PageURL
數(shù)據(jù)列表頁的基類。這里要定義分頁控件、查詢控件、查詢按鈕、按鈕組控件、數(shù)據(jù)顯示控件,在OnInit里面調(diào)用父類函數(shù)驗(yàn)證是否有權(quán)限訪問,然后給這些控件的屬性賦值(依據(jù)元數(shù)據(jù)來賦值)、設(shè)置關(guān)聯(lián)關(guān)系。
5、 BasePageForm。public partial class BasePageForm : PageURL
表單頁面的基類。這里要定義表單控件、保存按鈕等。
在OnInit里面首先驗(yàn)證DataID,再調(diào)用父類函數(shù)驗(yàn)證是否有權(quán)限訪問,再驗(yàn)證是否可以訪問指定的記錄(DataID),然后給這些控件的屬性賦值(依據(jù)元數(shù)據(jù)來賦值)、設(shè)置關(guān)聯(lián)關(guān)系。給保存按鈕定義事件。
在OnLoad里面設(shè)置表單的狀態(tài):添加、修改、查看等。
6、 BasePageDelete。public class BasePageDelete : PageURL
刪除數(shù)據(jù)的基類。
在OnInit里面首先驗(yàn)證DataID,再調(diào)用父類函數(shù)驗(yàn)證是否有權(quán)限訪問,再驗(yàn)證是否可以訪問指定的記錄(DataID)。
下面介紹公用頁面
1、 DataList1、DataList1.aspx。public partial class DataList1 : Base.BasePageList
數(shù)據(jù)列表的共用頁面。由于自然框架采用了“自定義控件+元數(shù)據(jù)”的方式,所以90%以上的列表頁面都可以由這個(gè)頁面來實(shí)現(xiàn),上次視頻演示的Demo里面,角色的列表、新聞維護(hù)、新聞分類的列表都是 DataList1.aspx。
由于大部分代碼都放在了基類里面,所以這里主要是做頁面布局,.aspx.cs里面只需要寫幾行代碼即可。
2、 DataForm1、DataForm1.aspx。public partial class DataForm1 : Base.BasePageForm
表單的共用頁面。由于自然框架采用了“自定義控件+元數(shù)據(jù)”的方式,所以20%以上的表單頁面都可以由這個(gè)頁面來實(shí)現(xiàn),上次視頻演示的Demo里面,添加新聞、添加分類的表單都是DataForm1.aspx。
3、 DataDelete1、DataDelete1.aspx。public partial class DataDelete1 : Base.BasePageDelete
刪除數(shù)據(jù)的共用頁面。刪除數(shù)據(jù)是一件很復(fù)雜的事情,一個(gè)頁面是不可能搞定的,這個(gè)頁面只是實(shí)現(xiàn)最最簡單的刪除的功能,其他復(fù)雜的就需要單獨(dú)寫代碼實(shí)現(xiàn)了。
總結(jié):URL參數(shù)的驗(yàn)證、權(quán)限的驗(yàn)證、訪問記錄的驗(yàn)證、控件屬性賦值等,都交給父類去做,子類就可以不用去考慮權(quán)限的問題,專心致志的處理好自己的業(yè)務(wù)邏輯了。這樣程序員就可以說:我是寫代碼的(實(shí)現(xiàn)具體功能),權(quán)限管我p事。
對(duì)了,還有一點(diǎn)忘記說了,這是一個(gè)獨(dú)立的、單獨(dú)的項(xiàng)目,他編譯后會(huì)生成 Nature.BaseUI.dll 文件,然后在做新的的項(xiàng)目的時(shí)候可以引用這個(gè)dll文件,然后在把其他的.aspx文件拷貝到項(xiàng)目的指定的文件夾里面。注意只是拷貝文件,不用添加到新的項(xiàng)目里。
附:BasePageList 的代碼。如果您感興趣的話,可以到這里下載全部代碼。http://www.cnblogs.com/jyk/archive/2009/09/09/1563269.html
驗(yàn)證權(quán)限的兩個(gè)函數(shù):
=========================
=希望我的想法,能夠給您帶來一點(diǎn)幫助!=
=大家一起研究、討論,共同提高、發(fā)財(cái)!=
=========================
如對(duì)本文有疑問,請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答!! 點(diǎn)擊進(jìn)入論壇