五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > 【自然框架】 頁面里的父類——把共用的東東都交給父類,讓子類專注于其他。

【自然框架】 頁面里的父類——把共用的東東都交給父類,讓子類專注于其他。

文章來源:365jz.com     點(diǎn)擊數(shù):378    更新時(shí)間:2009-09-17 10:26   參與評(píng)論

 

【類圖】


【命名空間】——————————————————【文件截圖】

   


可能您會(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

namespace Nature.UI.Base
{
    
/// <summary>
    
/// 列表頁面的基類
    
/// 這個(gè)算不算模板模式呢?
    
/// </summary>

    public partial class BasePageList : PageURL
    
{
        
定義共用的控件,以便于統(tǒng)一控制

        
/// <summary>
        
/// 在 OnInit 事件里面設(shè)置各個(gè)自定義控件的屬性和關(guān)聯(lián)
        
/// </summary>
        
/// <param name="e"></param>

        protected override void OnInit(EventArgs e)
        
{
            
base.OnInit(e);

            
//調(diào)用父類函數(shù),驗(yàn)證是否有權(quán)限訪問。
            CheckFunctionID(this.FunctionID);

            
//設(shè)置分頁控件的屬性和事件
            SetQuickPagerInfo();

            
//設(shè)置數(shù)據(jù)表格的屬性
            SetGridInfo();

            
//設(shè)置查詢控件的屬性
            SetFindControlInfo();

            
//設(shè)置操作按鈕的屬性
            SetButtonBarInfo();

        }


    }

}



驗(yàn)證權(quán)限的兩個(gè)函數(shù)

 
        
/// <summary>
        
/// 驗(yàn)證當(dāng)前用戶是否可以訪問指定的功能節(jié)點(diǎn)
        
/// </summary>
        
/// <param name="functionID">要驗(yàn)證的節(jié)點(diǎn)</param>

        public void CheckFunctionID(string functionID)
        
{
             
//判斷當(dāng)前用戶是否有權(quán)限訪問該網(wǎng)頁,
            string tmpFunctionIDs = "," + this.MyUser.FunctionIDs + ",";

            functionID 
= "," + functionID + ",";

            
if (tmpFunctionIDs.IndexOf(functionID) >= 0)
            
{
                
//有權(quán)限
            }

            
else
            
{
                
//沒有權(quán)限
                Response.Write("沒有權(quán)限");
                Response.Redirect(
"/noPermission.aspx");
                Response.End();
            }

        }

 
        
/// <summary>
        
/// 驗(yàn)證當(dāng)前用戶是否可以使用指定的按鈕打開的頁面
        
/// </summary>
        
/// <param name="functionID">要驗(yàn)證的節(jié)點(diǎn)</param>
        
/// <param name="buttonID">要驗(yàn)證的按鈕ID</param>

        public void CheckButtonID(string functionID, string buttonID)
        
{
             
//判斷當(dāng)前用戶是否可以使用指定的按鈕打開的頁面,
            
//獲取當(dāng)前用戶可以使用的按鈕
            string buttonIDs = MyUser.GetUserButtonID(functionID);

            buttonIDs 
= "," + buttonIDs + ",";
            buttonID 
= "," + buttonID + ",";
            
if (buttonIDs.IndexOf(buttonID) >= 0)
            
{
                
//有權(quán)限
            }

            
else
            
{
                
//沒有權(quán)限
                Response.Write("沒有權(quán)限");
                Response.Redirect(
"/noPermission.aspx");
                Response.End();
            }

        }

 

=========================
=希望我的想法,能夠給您帶來一點(diǎn)幫助!=
=大家一起研究、討論,共同提高、發(fā)財(cái)!=
=========================

如對(duì)本文有疑問,請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答!! 點(diǎn)擊進(jìn)入論壇

發(fā)表評(píng)論 (378人查看,0條評(píng)論)
請(qǐng)自覺遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動(dòng)的言論。
昵稱:
最新評(píng)論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢

· 技術(shù)支持
· 服務(wù)時(shí)間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號(hào)