日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

三层架构—实践篇(.Net登录实例)

發(fā)布時間:2025/6/15 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 三层架构—实践篇(.Net登录实例) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、框架的搭建


U層引用Model層

B層引用Model層和DAL層

D層引用Model層和數(shù)據(jù)庫連接ImportsSystem.Data.SqlClient??

二、UML圖

1、類圖


U層:Windows1

B層:LoginUser

D層:UserDAO

Model層:UerEn

2、時序圖


3、包圖(設(shè)計模式在代碼中未體現(xiàn),以后補充)

Link用來存儲連接字符串及SQL語句(以后補充)


三、代碼展示

1、實體類

[vb]?view plaincopy
  • <span?style="font-size:18px;">Public?Class?UserEn??
  • '定義所用到的屬性??
  • ????Private?_userName?As?String??
  • ????Public?Property?UserName?As?String??
  • ????????Get??
  • ????????????Return?_userName??
  • ????????End?Get??
  • ??
  • ????????Set(ByVal?value?As?String)??
  • ???????????_userName?=?value??
  • ????????End?Set??
  • ????End?Property??
  • ??
  • ????Private?_password?As?String??
  • ????Public?Property?Password?As?String??
  • ????????Get??
  • ????????????Return?_password??
  • ????????End?Get??
  • ??
  • ????????Set(ByVal?value?As?String)??
  • ????????????_password?=?value??
  • ????????End?Set??
  • ????End?Property??
  • End?Class</span>??
  • 2、U層

    [vb]?view plaincopy
  • <span?style="font-size:18px;">Imports?Login.BLL???????????'層中引用,在調(diào)用對象時不用寫命名空間名??
  • Imports?Model??
  • Public?ClassStartWindow??
  • ??
  • ????'退出程序??
  • ????Private?Sub?btnexit_Click(sender?As?Object,e?As?EventArgs)?Handles?btnexit.Click??
  • ????????End??
  • ????End?Sub??
  • ????'登錄??
  • ??
  • ????Private?Sub?btnOK_Click(sender?As?Object,?eAs?EventArgs)?Handles?btnOK.Click??
  • ????????Try??
  • ??
  • ????????????Dim?user1?As?New?UserEn?????????????????'實例化實體類,user1為實體類的對象??
  • ????????????Dim?check?As?New?LoginUser??????????????'實例化B層的LoginUser類??
  • ????????????Dim?user?As?Boolean????????????????????'定義布爾型變量,用來返回(也可定義為實體類型,返回實體類)??
  • ??????????????
  • <span?style="font-size:18px;">????????????</span>user1.UserName?=txtUserName.Text.Trim????'把文本框用戶名賦給實體類中的UserName??
  • ????????????user1.Password?=txtPassword.Text??????????'同理??
  • ??
  • ????????????If?txtUserName.Text?=?""Then??????????????'判斷用戶名文本框是否為空??
  • ???????????????MessageBox.Show("請輸入用戶名!")??
  • ????????????End?If??
  • ??
  • ????????????If?txtPassword.Text?=?""Then???????????????'同理??
  • ???????????????MessageBox.Show("請輸入密碼!")??
  • ????????????End?If??
  • ????????????user?=?check.Login(user1)??????????????????'把B層Loin方法判斷返回的值賦予user,左右同時為真則登錄成功??
  • ????????????MessageBox.Show("成功登錄!")??
  • ????????Catch?ex?As?Exception???????????????????????????'捕獲從B/D層拋出的異常??
  • ??
  • ????????????MsgBox(ex.Message)??
  • ????????End?Try??
  • ????End?Sub??
  • End?Class</span>??

  • 3、B層

    [vb]?view plaincopy
  • <span?style="font-size:18px;">Imports?Model??
  • Imports?Login.DAL??
  • ??
  • Public?ClassLoginUser??
  • ??
  • ????Function?Login(ByVal?user1?As?Model.UserEn)As?Boolean??
  • ????????Dim?Dal?As?New?UserDAO?????????????'實例化D層UserDAO對象??
  • ????????Dim?user2?As?Boolean????????????????'定義變量??
  • ??
  • ????????user2?=?Dal.SelectUser(user1)??????'調(diào)出D層方法SelectUser??
  • ????????'判斷返回結(jié)果???
  • ????????If?user2?Then??
  • ????????????Return?True??
  • ????????Else??
  • ????????????Throw?NewException("登錄失敗!")??
  • ????????????Exit?Function??
  • ????????End?If??
  • ????End?Function??
  • End?Class</span>??
  • 4、D層

    [vb]?view plaincopy
  • <span?style="font-size:18px;"><span?style="font-size:18px;">Imports?Model??
  • ImportsSystem.Data.SqlClient???????????'數(shù)據(jù)庫連接需引用??
  • ImportsSystem.Data.SqlClient.SqlCommand??
  • Public?Class?UserDAO??
  • ??
  • ????'連接數(shù)據(jù)庫??
  • ????'SqlConnection表示一個到?SQL?Server數(shù)據(jù)庫的打開的連接。此類不能被繼承。??
  • ????Dim?connDB?As?String?="Server=.;Database=MyLogin;User?ID=sa;Password=123;"??
  • ????Dim?connSQL?As?SqlConnection?=?NewSqlConnection(connDB)??
  • ??
  • ????Function?SelectUser(ByVal?user1?AsModel.UserEn)?As?Boolean??
  • ??
  • ????????'把要執(zhí)行的SQL語句賦給字符串變量sql??
  • ??
  • ????????Dim?sql?As?String?=?"select?*?FromUserInfo?where?UserID=@UserName?AND?Password=@Password;"??
  • ????????Dim?cmd?As?SqlCommand?=?NewSqlCommand(sql,?connSQL)?????????'執(zhí)行查詢語句??
  • ??
  • ???
  • ??
  • ????????'通過把實體的相關(guān)內(nèi)容賦給參數(shù),再將參數(shù)帶到數(shù)據(jù)庫對比(防止SQL注入)??
  • ??
  • ????????cmd.Parameters.Add(NewSqlParameter("@UserName",?user1.UserName))??
  • ????????cmd.Parameters.Add(NewSqlParameter("@Password",?user1.Password))??
  • ??
  • ????????'打開連接,讀取數(shù)據(jù)??
  • ??
  • ????????connSQL.Open()??
  • ????????Dim?read?As?SqlDataReader?=cmd.ExecuteReader()??
  • ??
  • ????????'若存在數(shù)據(jù)則返回True,否則相反??
  • ??
  • ????????If?read.Read()?Then??
  • ????????????Return?True??
  • ????????Else??
  • ????????????Return?False??
  • ????????????Exit?Function??
  • ????????End?If??
  • ????End?Function??
  • End?Class</span>??
  • </span>??
  • 結(jié)果:



    四、知識點小結(jié)

    1、傳實體與傳參數(shù)區(qū)別

    ??????? 在參數(shù)較少的情況下,使用傳參比較方便;用的參數(shù)較多建議使用傳實體,效率較高

    注意:如果在界面上顯示數(shù)據(jù)則設(shè)計到對實體的拆裝箱操作

    例子:C#語言

    [csharp]?view plaincopy
  • <span?style="font-size:18px;">?user.ID?=?reader.GetInt32(0);??
  • ?user.UserName?=?reader.GetString(1);??
  • ?user.Password?=?reader.GetString(2);??
  • ??if(!reader.IsDBNull(3))??
  • ??
  • ?{??
  • ???user.Email?=?reader.GetString(3);??
  • }</span>??
  • 2、每層引用與單層Imports引用區(qū)別

    層與層間引用:可以通過命名空間.類名,實現(xiàn)調(diào)用

    層中Imports引用:直接寫調(diào)用的類名即可

    3、實例化對象與定義同類型變量區(qū)別

    newUserEn()是指在內(nèi)存中開辟了一塊空間,創(chuàng)建了一個對象,然后讓一個UserEn類型的變量user引用(指向)它。user也只不過是創(chuàng)建的那個實體對象的名稱而已。

    ?

    總結(jié)

    以上是生活随笔為你收集整理的三层架构—实践篇(.Net登录实例)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。