使用VS搭建三层结构
參考資料:http://book.51cto.com/art/200906/131383.htm
通過一個簡單的登錄功能實現,講述如何搭建三層結構。
?
1.搭建數據訪問層
(1)打開VS 2005開發環境,依次選擇"文件"→"新建"→"項目"命令
?
(2)在打開的"新建項目"對話框中,選擇項目類型為"Visual Studio解決方案",選擇模板為"空白解決方案"。然后填寫解決方案的名稱為"Chat",并指定保存位置
(3)在"解決方案資源管理器"中,在解決方案名稱上單擊鼠標右鍵,在彈出的快捷菜單中選擇"添加"→"新建項目"命令
(4)在打開的"新建項目"對話框中,選擇項目類型為"Visual C#",選擇模板為"類庫"。填寫項目的名稱為"DAL",該項目用于實現數據訪問層。此時項目的保存位置已經默認輸入了,是剛才創建空白解決方案時產生的路徑
?
?
2.搭建業務邏輯訪問層
搭建業務邏輯層的步驟與搭建數據訪問層類似,不同的是需要重新填寫項目名稱為"BLL",?
?
3.搭建表示層
(1)在"解決方案資源管理器"中,在解決方案名稱上單擊鼠標右鍵,在彈出的快捷菜單中選擇"添加"→"新建網站"命令
?
(2)在打開的"添加新網站"對話框中,選擇"ASP.NET網站",選擇位置為"文件系統",并設置網站的路徑
?
?
在三層結構開發中,通常還會使用模型層。模型層包含所有與數據庫中的表相對應的實體類。表示層、業務邏輯層和數據訪問層三層之間通過傳遞實體對象來達到數據傳遞的目的。
創建模型層的步驟與搭建業務邏輯層和數據訪問層類似,不同的是需要重新填寫項目名稱為"Models",
?
此時,在"解決方案資源管理器"中,三層結構的基本框架如圖4所示
?
?
4.添加各層之間依賴關系
此時,雖然三層結構的基本框架已經搭建成功,但是各層之間是獨立的。只有添加依賴關系,才能讓它們相互協作。
(1)添加表示層對業務邏輯層及模型層的依賴。在"解決方案資源管理器"中,在表示層上單擊鼠標右鍵,在彈出的快捷菜單中選擇"添加引用"命令
??
(2)在打開的"添加引用"對話框中,選擇"項目"選項卡,選中項目名稱為"BLL"和"Models"的兩個項目,單擊"確定"按鈕,
(3)使用上述方法在業務邏輯層中添加對數據訪問層和模型層的依賴,以及數據訪問層對模型層的依賴。
?
至此,三層結構及各層之間的依賴關系創建完畢。下面以登錄為例,測試各層之間如何協同工作的。
?
1)編寫實體類User.cs
在模型層中,將默認的類名Class1.cs重命名為"User.cs",該實體類與數據庫Chat中的表User相對應。實體類User.cs中部分代碼如下:
?
using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;
namespace?MODEL
{
????public?class?User
????{
????????聲明用戶屬性
????????public?User()
????????{
????????}
????}
}
?
?
2)編寫數據訪問類UserService
針對模型層中的每個實體類,數據訪問層有一個對應的數據訪問類。例如,針對User實體類,創建一個對應的UserService類,用于對數據表Users的數據處理。
在UserService類中添加一個根據登錄名進行查詢的方法,代碼如下:
?
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?根據用戶名,返回用戶實體
????????///?<summary>
????????///?根據用戶名,返回用戶實體
????????///?</summary>
????????///?<param?name="strUserName">用戶名</param>
????????///?<returns>User</returns>
????????public?static?User?GetUserByUserName(string?strUserName)
????????{
????????????//根據用戶名,查詢是否存在此用戶
????????????string?strSqlGetUser?=?"select?*?from?T_User?where?UserName=@UserName";
????????????SQLHelp?help?=?new?SQLHelp();
????????????SqlDataReader?dr?=?null;
????????????SqlParameter[]?para?=?{
??????????????????????????????????????new?SqlParameter?("@UserName",strUserName)
??????????????????????????????????};
????????????//根據用戶名,返回dataReader對象
????????????dr?=?help.GetDRWithPara(strSqlGetUser,?para);
????????????//數據流中是否有數據
????????????if?(dr.Read())
????????????{
????????????????//聲明User對象,將數據流中的值賦給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"]);
????????????????//關閉SqlDataReader對象,此時連接同時關閉
????????????????//詳見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)編寫業務邏輯類UserManager
針對模型層中的每個實體類,業務邏輯層中也有一個對應的類。例如,針對User實體類,創建一個對應的UserManager類。
在UserManager類中添加用于登錄驗證的業務方法,其代碼如下:
?
?
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">輸出參數(User類型對象)</param>
????????///?<returns>User類型對象</returns>
????????public?static?bool?Login(string?strUserName,?string?Pwd,?out?User?validUser)
????????{
????????????//根據用戶名獲取用戶信息,調用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)創建頁面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;
????????????//登錄驗證,調用BLL層的Login驗證函數,返回是否通過驗證的布爾值和實例化的User對象
????????????if?(UserManager.Login(strUserName,?Pwd,?out?newUser))
????????????{
????????????????//添加User類型對象到Session
????????????????Session["User"]?=?newUser;
????????????????Response.Redirect("Chat.aspx");
????????????}
????????????else
????????????{
????????????????Response.Write("<script>alert('用戶名或密碼錯誤!')</script>");
????????????}
????????}
????}
}
?
運行程序前,還需設置啟動項目。在"解決方案資源管理器"中的表示層上單擊鼠標右鍵,在彈出的快捷菜單中選擇"設為啟動項目"命令,將表示層設置為啟動項目
運行程序,輸入登錄名、密碼,單擊"登錄"按鈕后,頁面跳轉到**.aspx,顯示登錄成功
總結
以上是生活随笔為你收集整理的使用VS搭建三层结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 斐波拉契递归 尾递归 备忘
- 下一篇: App.Config详解