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

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > [ASP中使用三層架構(gòu)] 9.用戶登錄之一 User表與相關(guān)類

[ASP中使用三層架構(gòu)] 9.用戶登錄之一 User表與相關(guān)類

文章來源:365jz.com     點(diǎn)擊數(shù):694    更新時(shí)間:2009-10-14 10:51   參與評論

    接下來開始講解如何用三層架構(gòu)來建立用戶登錄過程.
    這個(gè)過程用一般的編程方式寫起來很簡單,從這里入手來講解三層架構(gòu)的實(shí)例,想必大家都會更容易了解其中的邏輯結(jié)構(gòu).
   
    首先我們做一些準(zhǔn)備工作,構(gòu)造這個(gè)業(yè)務(wù)需要用到的幾個(gè)類,其中包括三個(gè)部分:
    User部分的實(shí)體類MOD_User,單表數(shù)據(jù)訪問類DAL_User
    UserLog部分的單表數(shù)據(jù)訪問類DAL_UserLog
    User業(yè)務(wù)相關(guān)的業(yè)務(wù)邏輯類BLL_User,多表數(shù)據(jù)訪問類MUL_User
   
    好,我們開始準(zhǔn)備第一部分.
   
    [User] 表的結(jié)構(gòu)如下
 [UserID] [int] IDENTITY(1,1) NOT NULL,
 [UserAccount] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
 [UserPassword] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
 [UserName] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
 [UserPower] [int] NOT NULL,
 [LogCount] [int] NULL,
 [UserDate] [datetime] NULL,
   
    以[User]表生成一個(gè)實(shí)體類MOD_User,文件名為MOD_User.asp,放在/Class/MOD/目錄下,內(nèi)容如下,請大家熟悉一下property的寫法
    class MOD_User
        ' ******[User] database field
     private lngUserID                               '[int] NOT NULL
     private strUserAccount                          '[ntext] 用戶登錄名
     private strUserPassword                         '[ntext] 密碼
     private strUserName                             '[ntext] 用戶名稱
     private intUserPower                            '[int]   權(quán)限
     
     ' ==============================================================================
     ' Class Initialize, Terminate
     ' ==============================================================================
     Private Sub Class_Initialize
       End Sub
       Private Sub Class_Terminate
       End Sub
       
       
     ' ==============================================================================
     ' property in/out
     ' ==============================================================================
     Public Property Let UserID(ByVal Value )
      lngUserID = Convert.ToLng(Value)
     End Property
     Public Property Get UserID
      UserID    = lngUserID
     End Property
     
     Public Property Let UserAccount(ByVal Value )
      strUserAccount    = trim(Value)
     End Property
     Public Property Get UserAccount      
      UserAccount       = strUserAccount
     End Property
     
     Public Property Let UserPassword(ByVal Value )
      strUserPassword   = trim(Value)
     End Property
     Public Property Get UserPassword      
      UserPassword      = strUserPassword
     End Property
     
     Public Property Let UserName(ByVal Value ) 
      strUserName   = trim(Value)
     End Property
     Public Property Get UserName
      UserName      = strUserName
     End Property
     
     Public Property Let UserPower(ByVal Value ) 
      intUserPower  = Convert.ToInt(Value)
     End Property
     Public Property Get UserPower
      UserPower     = intUserPower
     End Property

    end class
   
    Convert 對象在此出現(xiàn)的比較多.
    實(shí)體類的好處之一就在這里,把值填充到類的屬性中,可以將變量轉(zhuǎn)換的工作完全交給這個(gè)實(shí)體類,在程序中使用的時(shí)候就不用再來來去去地轉(zhuǎn)換了.
    所以鼓勵(lì)大家用Property代替Public操作.
    Appdb系統(tǒng)會有一個(gè)功能,通過已有的數(shù)據(jù)表,直接生成對應(yīng)的MOD類的代碼,它會自己用Property構(gòu)造如上同樣的實(shí)體類,而且會根據(jù)字段類型不同自己選擇不同的Convert方法進(jìn)行轉(zhuǎn)換. 有了這個(gè)工具,就可以節(jié)省大量的重復(fù)性的基礎(chǔ)工作了,這個(gè)工具也是為三層架構(gòu)而產(chǎn)生的,其他語言的編程工具中都有這樣的功能,咱也不能缺.
   
   
    以[User]表生成一個(gè)單表數(shù)據(jù)訪問類DAL_User,文件名為DAL_User.asp,放在/Class/DAL/目錄下,內(nèi)容如下:
    class DAL_User
        ' ******[User] database field
     private lngUserID                              '[int] NOT NULL
     private strUserAccount                         '[ntext]
     private strUserPassword                        '[ntext]
     private strUserName                            '[ntext]
     private intUserPower                           '[int]
       
     private strSql                                 'Sql query
     private rs_User                                'Dataset for poheader
       
     
     ' ==============================================================================
     ' Class Initialize, Terminate
     ' ==============================================================================
     Private Sub Class_Initialize
         set rs_User=server.createobject("adodb.recordset")
       End Sub
       Private Sub Class_Terminate
         set rs_User=nothing
       End Sub
       

    ' ///////////////////////////////////////////////////////////////////////////////
    '               Get  Data / dataset
    ' ///////////////////////////////////////////////////////////////////////////////
     Public Function CheckLogin(ByRef vMUser)
         strSql = " select top 1 * from [User] where UserAccount='" & page.ToSql(vMUser.UserAccount) & "'"
         rs_User.Open strSql,Data.conn,1,1
      if rs_User.bof and rs_User.eof then
          e.Add " This User does not exit ! "
          CheckLogin = false
      else
          if rs_User("UserPassword") = vMUser.UserPassword then
                    vMUser.UserID       = rs_User("UserID")
                    vMUser.UserName     = rs_User("UserName")
                    vMUser.UserPower    = rs_User("UserPower")
                    CheckLogin = true
                else
                    e.Add " Wrong password ! "
                    CheckLogin = false
                end if
      end if
      rs_User.close
     End Function
    ' ///////////////////////////////////////////////////////////////////////////////   
    '                   Update Table
    ' ///////////////////////////////////////////////////////////////////////////////
   
   
    ' ///////////////////////////////////////////////////////////////////////////////
    '                   Show UI / Show-select
    ' ///////////////////////////////////////////////////////////////////////////////
   
    end class
   
    需要解說一下的是DAL_User類中的CheckLogin方法.
    這個(gè)方法接納一個(gè)參數(shù)(ByRef vMUser), vMUser 是一個(gè)MOD_User實(shí)例化之后一個(gè)實(shí)體對象,實(shí)例化語句為:
    set MUser = new MOD_User
    在BLL_User中會調(diào)用上面這個(gè)CheckLogin方法,將MUser傳遞給DAL_User.CheckLogin, 就是這里的ByRef vMUser了,習(xí)慣上我把函數(shù)的參數(shù)名前面加一個(gè)v.
    具體的實(shí)現(xiàn)過程請看后面的用戶登錄過程的實(shí)施階段.
   
    這個(gè)地方有個(gè)需要討論的疑點(diǎn),就是實(shí)體類作為傳值參數(shù)時(shí),是應(yīng)該用ByRef還是ByVal.
    在vbscript中,一個(gè)實(shí)例化的對象在被set給另外一個(gè)實(shí)例名以后,雖然名稱不同,但是仍然是指向同一個(gè)內(nèi)存地址,換了湯沒換藥. 所以在這里用ByRef ByVal效果是一模一樣的.
    但是為了在程序的邏輯上的清晰,在此使用ByRef,以示這個(gè)vMUser實(shí)體類在這里被加工后,仍然會被調(diào)用它的程序繼續(xù)使用.
   
    Private Sub Class_Initialize 和 Private Sub Class_Terminate應(yīng)該不用解釋了吧,如果不甚了解,可以去看看vbscript語法
   
   
    不知道你有沒有注意到這句: page.ToSql(vMUser.UserAccount)
    page是另一個(gè)比較重要的通用類,用來處理頁面上常用的操作,例如這里的ToSql就是將一個(gè)字符串加工成為安全的SQL參數(shù),實(shí)施單引號替換為兩個(gè)單引號等操作. 這個(gè)類我還沒有完善,所以就不貼出來獻(xiàn)丑了,也算作為大家來學(xué)習(xí)三層架構(gòu)的作業(yè),自己構(gòu)造一個(gè)CON_Page類來用吧
   
    還有兩個(gè)通用對象的身影:
    Data.conn
    e.Add " Wrong password ! "
    大家可以對照前面幾章熟悉一下這兩個(gè)通用類.
   
   
    另外有個(gè)注釋,如下:
    ' ///////////////////////////////////////////////////////////////////////////////
    '               Get  Data / dataset
    ' ///////////////////////////////////////////////////////////////////////////////
    這個(gè)給類中的不同的方法進(jìn)行分組的大分隔符,代碼中還有2個(gè)類似的.
    原因是,我發(fā)現(xiàn)單表數(shù)據(jù)訪問類中的方法,其功能上基本上只有3組:
        1.獲取單值或單記錄集
        2.更新數(shù)據(jù)表的內(nèi)容
        3.產(chǎn)生出放在UI上的HTML段,例如<option value=1></option>....之類
    把這三組分開以后,再來查找某一個(gè)方法,比較容易定位.
    只是一個(gè)個(gè)人習(xí)慣,大家可以各自發(fā)揮.

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

發(fā)表評論 (694人查看,0條評論)
請自覺遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動(dò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號