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

歡迎訪問 生活随笔!

生活随笔

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

使用VS搭建三层结构

發(fā)布時間:2025/6/15 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用VS搭建三层结构 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

參考資料:http://book.51cto.com/art/200906/131383.htm

通過一個簡單的登錄功能實現(xiàn),講述如何搭建三層結(jié)構(gòu)。

?

1.搭建數(shù)據(jù)訪問層

(1)打開VS 2005開發(fā)環(huán)境,依次選擇"文件"→"新建"→"項目"命令

?

(2)在打開的"新建項目"對話框中,選擇項目類型為"Visual Studio解決方案",選擇模板為"空白解決方案"。然后填寫解決方案的名稱為"Chat",并指定保存位置

(3)在"解決方案資源管理器"中,在解決方案名稱上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇"添加"→"新建項目"命令

(4)在打開的"新建項目"對話框中,選擇項目類型為"Visual C#",選擇模板為"類庫"。填寫項目的名稱為"DAL",該項目用于實現(xiàn)數(shù)據(jù)訪問層。此時項目的保存位置已經(jīng)默認(rèn)輸入了,是剛才創(chuàng)建空白解決方案時產(chǎn)生的路徑

?

?

2.搭建業(yè)務(wù)邏輯訪問層

搭建業(yè)務(wù)邏輯層的步驟與搭建數(shù)據(jù)訪問層類似,不同的是需要重新填寫項目名稱為"BLL",?

?

3.搭建表示層

(1)在"解決方案資源管理器"中,在解決方案名稱上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇"添加"→"新建網(wǎng)站"命令

?

(2)在打開的"添加新網(wǎng)站"對話框中,選擇"ASP.NET網(wǎng)站",選擇位置為"文件系統(tǒng)",并設(shè)置網(wǎng)站的路徑

?

?

在三層結(jié)構(gòu)開發(fā)中,通常還會使用模型層。模型層包含所有與數(shù)據(jù)庫中的表相對應(yīng)的實體類。表示層、業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層三層之間通過傳遞實體對象來達(dá)到數(shù)據(jù)傳遞的目的。

創(chuàng)建模型層的步驟與搭建業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層類似,不同的是需要重新填寫項目名稱為"Models",

?

此時,在"解決方案資源管理器"中,三層結(jié)構(gòu)的基本框架如圖4所示

?

?

4.添加各層之間依賴關(guān)系

此時,雖然三層結(jié)構(gòu)的基本框架已經(jīng)搭建成功,但是各層之間是獨立的。只有添加依賴關(guān)系,才能讓它們相互協(xié)作。

(1)添加表示層對業(yè)務(wù)邏輯層及模型層的依賴。在"解決方案資源管理器"中,在表示層上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇"添加引用"命令

??

(2)在打開的"添加引用"對話框中,選擇"項目"選項卡,選中項目名稱為"BLL"和"Models"的兩個項目,單擊"確定"按鈕,

(3)使用上述方法在業(yè)務(wù)邏輯層中添加對數(shù)據(jù)訪問層和模型層的依賴,以及數(shù)據(jù)訪問層對模型層的依賴。

?

至此,三層結(jié)構(gòu)及各層之間的依賴關(guān)系創(chuàng)建完畢。下面以登錄為例,測試各層之間如何協(xié)同工作的。

?

1)編寫實體類User.cs

在模型層中,將默認(rèn)的類名Class1.cs重命名為"User.cs",該實體類與數(shù)據(jù)庫Chat中的表User相對應(yīng)。實體類User.cs中部分代碼如下:

?


using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;

namespace?MODEL
{
????
public?class?User
????
{
????????
聲明用戶屬性

????????
public?User()
????????
{

????????}

????}

}

?

?

2)編寫數(shù)據(jù)訪問類UserService

針對模型層中的每個實體類,數(shù)據(jù)訪問層有一個對應(yīng)的數(shù)據(jù)訪問類。例如,針對User實體類,創(chuàng)建一個對應(yīng)的UserService類,用于對數(shù)據(jù)表Users的數(shù)據(jù)處理。

在UserService類中添加一個根據(jù)登錄名進(jìn)行查詢的方法,代碼如下:

?


using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;
using?System.Data;
using?System.Data.SqlClient;
using?MODEL;

namespace?DAL
{
????
public?class?UserService
????{
????????
#region?根據(jù)用戶名,返回用戶實體
????????
///?<summary>
????????
///?根據(jù)用戶名,返回用戶實體
????????
///?</summary>
????????
///?<param?name="strUserName">用戶名</param>
????????
///?<returns>User</returns>
????????public?static?User?GetUserByUserName(string?strUserName)
????????{
????????????
//根據(jù)用戶名,查詢是否存在此用戶
????????????string?strSqlGetUser?=?"select?*?from?T_User?where?UserName=@UserName";

????????????SQLHelp?help?
=?new?SQLHelp();

????????????SqlDataReader?dr?
=?null;

????????????SqlParameter[]?para?
=?{
??????????????????????????????????????
new?SqlParameter?("@UserName",strUserName)
??????????????????????????????????};

????????????
//根據(jù)用戶名,返回dataReader對象
????????????dr?=?help.GetDRWithPara(strSqlGetUser,?para);

????????????
//數(shù)據(jù)流中是否有數(shù)據(jù)
????????????if?(dr.Read())
????????????{
????????????????
//聲明User對象,將數(shù)據(jù)流中的值賦給User對象
????????????????User?newUser?=?new?User();
????????????????newUser.UserID?
=?Convert.ToInt32(dr["UserID"]);
????????????????newUser.UserName?
=?dr["UserName"].ToString();
????????????????newUser.Pwd?
=?dr["Pwd"].ToString();
????????????????newUser.Email?
=?dr["Email"].ToString();
????????????????newUser.Score?
=?Convert.ToInt32(dr["Score"]);

????????????????
//關(guān)閉SqlDataReader對象,此時連接同時關(guān)閉
????????????????
//詳見SQLHelp:GetDRWithPara(string?cmdText,?SqlParameter[]?para)
????????????????
//mycom.ExecuteReader(CommandBehavior.CloseConnection);
????????????????dr.Close();
????????????????
return?newUser;
????????????}
????????????
else
????????????{
????????????????dr.Close();
????????????????
return?null;
????????????}
????????}
????????
#endregion
????}
}

?

?代碼中使用到的SQLHelp類詳見http://www.cnblogs.com/windows/articles/1602282.html

?

3)編寫業(yè)務(wù)邏輯類UserManager

針對模型層中的每個實體類,業(yè)務(wù)邏輯層中也有一個對應(yīng)的類。例如,針對User實體類,創(chuàng)建一個對應(yīng)的UserManager類。

在UserManager類中添加用于登錄驗證的業(yè)務(wù)方法,其代碼如下:

?

?


using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;
using?MODEL;
using?DAL;

namespace?BLL
{
????
public?class?UserManager
????
{
????????
///?<summary>
????????
///?驗證用戶登錄
????????
///?</summary>
????????
///?<param?name="strUserName">用戶名</param>
????????
///?<param?name="Pwd">密碼</param>
????????
///?<param?name="validUser">輸出參數(shù)(User類型對象)</param>
????????
///?<returns>User類型對象</returns>

????????public?static?bool?Login(string?strUserName,?string?Pwd,?out?User?validUser)
????????
{
????????????
//根據(jù)用戶名獲取用戶信息,調(diào)用DAL層方法
????????????User?newUser?=?UserService.GetUserByUserName(strUserName);

????????????
//不存在此用戶
????????????if?(newUser?==?null)
????????????
{
????????????????validUser?
=?null;
????????????????
return?false;
????????????}


????????????
//密碼錯誤
????????????if?(newUser.Pwd?==?Pwd)
????????????
{
????????????????validUser?
=?newUser;
????????????????
return?true;
????????????}

????????????
else
????????????
{
????????????????validUser?
=?null;
????????????????
return?false;
????????????}

????????}

????}

}

?

4)編寫表示層

(1)創(chuàng)建頁面Default.aspx

?

?

(2)雙擊"登錄"按鈕,生成其Click事件,并在代碼后置文件Default.aspx.cs中編寫事件處理程序,其代碼如下:

?


using?System;
using?System.Collections;
using?System.Configuration;
using?System.Data;
using?System.Linq;
using?System.Web;
using?System.Web.Security;
using?System.Web.UI;
using?System.Web.UI.HtmlControls;
using?System.Web.UI.WebControls;
using?System.Web.UI.WebControls.WebParts;
using?System.Xml.Linq;
using?MODEL;
using?BLL;

namespace?Chat
{
????
public?partial?class?_Default?:?System.Web.UI.Page
????
{
????????
protected?void?Page_Load(object?sender,?EventArgs?e)
????????
{

????????}


????????
///?<summary>
????????
///?用戶登錄
????????
///?</summary>
????????
///?<param?name="sender"></param>
????????
///?<param?name="e"></param>

????????protected?void?btLogin_Click(object?sender,?EventArgs?e)
????????
{
????????????User?newUser;
????????????
string?strUserName?=?null;
????????????
string?Pwd;

????????????
//檢測用戶輸入的用戶名和密碼是否為空
????????????if?(tbUserName.Text.Trim().Length?==?0)
????????????
{
????????????????Response.Write(
"<script>alert('請輸入用戶名!')</script>");
????????????????
return;
????????????}


????????????
if?(tbPwd.Text.Trim().Length?==?0)
????????????
{
????????????????Response.Write(
"<script>alert('請輸入密碼!')</script>");
????????????????
return;
????????????}


????????????
//不為空則獲取用戶名和密碼
????????????strUserName?=?tbUserName.Text;
????????????Pwd?
=?tbPwd.Text;

????????????
//登錄驗證,調(diào)用BLL層的Login驗證函數(shù),返回是否通過驗證的布爾值和實例化的User對象
????????????if?(UserManager.Login(strUserName,?Pwd,?out?newUser))
????????????
{
????????????????
//添加User類型對象到Session
????????????????Session["User"]?=?newUser;
????????????????Response.Redirect(
"Chat.aspx");
????????????}

????????????
else
????????????
{
????????????????Response.Write(
"<script>alert('用戶名或密碼錯誤!')</script>");
????????????}

????????}

????}

}

?

運(yùn)行程序前,還需設(shè)置啟動項目。在"解決方案資源管理器"中的表示層上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇"設(shè)為啟動項目"命令,將表示層設(shè)置為啟動項目

運(yùn)行程序,輸入登錄名、密碼,單擊"登錄"按鈕后,頁面跳轉(zhuǎn)到**.aspx,顯示登錄成功

總結(jié)

以上是生活随笔為你收集整理的使用VS搭建三层结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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