C#—三层架构
于學(xué)習(xí)到三層了~接下來(lái)也要下功夫?qū)W習(xí)機(jī)房重構(gòu)了,給自己加油!
【內(nèi)容】
1.什么是三層架構(gòu)
三層架構(gòu)分為物理上的和邏輯上的,其中:
(1)在物理上是顯示層、業(yè)務(wù)層、數(shù)據(jù)層,下面是一個(gè)應(yīng)用軟件的三層架構(gòu)模型:
(2)邏輯上:UI 層、BLL 層、DAL層。
在這里,我們主要來(lái)學(xué)習(xí)邏輯上的三層。
2.三層具體介紹
(1)數(shù)據(jù)訪問(wèn)層(DAL)
處理一切和數(shù)據(jù)庫(kù)直接進(jìn)行交互的操作,如數(shù)據(jù)庫(kù)的增刪改查。
1)DAL的作用
從數(shù)據(jù)源加載數(shù)據(jù)(Select);
向數(shù)據(jù)源寫(xiě)入數(shù)據(jù)(Insert/Update);
從數(shù)據(jù)源刪除數(shù)據(jù)(Delete)。
2)DAL中常用的技術(shù)
ADO.NET + SQL語(yǔ)句;
O/R Mapping框架;
訪問(wèn)SQL Server數(shù)據(jù)庫(kù)時(shí)Ling to SQL。
(2)顯示層(UI)
也稱用戶界面層,是用戶所看的到的界面。
1)UI的作用
向用戶展現(xiàn)特定業(yè)務(wù)數(shù)據(jù);
采集用戶的輸入信息和操作。
2)UI設(shè)計(jì)的原則
用戶至上,兼顧簡(jiǎn)潔。
3)UI中常用的技術(shù)
WindowsForm:Form、Control
ASP.NET:aspx、ascx、master、html
(3)業(yè)務(wù)邏輯層(BLL)
主要做業(yè)務(wù)邏輯判斷和計(jì)算。
1)BLL的作用
從DAL中獲取數(shù)據(jù),以供UI顯示用;
從UI中獲取用戶指令和數(shù)據(jù),執(zhí)行業(yè)務(wù)邏輯;
從UI中獲取用戶指令和數(shù)據(jù),通過(guò)DAL寫(xiě)入數(shù)據(jù)源。
2)BLL的職責(zé)機(jī)制
——UI->BLL->UI
UI發(fā)出業(yè)務(wù)請(qǐng)求到BLL,BLL處理完后將結(jié)果返回給UI層。
——UI->BLL->DAL->BLL->UI
UI發(fā)送業(yè)務(wù)請(qǐng)求到BLL,BLL向DAL發(fā)送數(shù)據(jù)請(qǐng)求,DAL將查到的相關(guān)數(shù)據(jù)返到BLL層,BLL層處理完后將結(jié)果返回到UI層。
3.具體應(yīng)用原則
(1)DAL只提供基本的數(shù)據(jù)訪問(wèn),不包含任何業(yè)務(wù)相關(guān)的邏輯處理;
(2)UI只負(fù)責(zé)顯示和采集用戶操作,不包含任何的業(yè)務(wù)相關(guān)的邏輯處理;
(3)BLL負(fù)責(zé)處理業(yè)務(wù)邏輯。通過(guò)獲取UI傳來(lái)的操作指令,決定執(zhí)行業(yè)務(wù)邏輯,在需要訪問(wèn)數(shù)據(jù)源的時(shí)候直接交給DAL處理;處理完成后,返回必要數(shù)據(jù)給UI。
4.三層之間關(guān)系圖
5.代碼部分
UI層代碼實(shí)現(xiàn)
//獲取用戶輸入的用戶名
string userName = txtUserName.Text.Trim();
//獲取用戶輸入的密碼
string password = txtPassword.Text;
//和業(yè)務(wù)邏輯層進(jìn)行交互,實(shí)例化一個(gè)BLL層對(duì)象
Login.BLL.LoginManager mgr = new Login.BLL.LoginManager();
//和Model交互,建立對(duì)象user用來(lái)接收數(shù)據(jù)鏈路層產(chǎn)生的user信息
Login.Model.UserInfo user = mgr.UserLogin(userName,password);
//登錄成功
MessageBox.Show(“登錄用戶:” + user.UserName);
DAL層代碼實(shí)現(xiàn)
//連接數(shù)據(jù)庫(kù)
namespace Login.DAL
{
class DbUtil
{
public static string ConnString = @“Server=FRJ;DataBase=Login;User ID=sa;Password=123”;
}
}
//UserDAO實(shí)現(xiàn)
namespace Login.DAL
{
public class UserDAO
{
public Login.Model.UserInfo SelectUser(string userName, string password)
{
//實(shí)例化一個(gè)對(duì)象cnn,用來(lái)打開(kāi)數(shù)據(jù)庫(kù)連接
using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))
{
//實(shí)例化一個(gè)對(duì)SQL執(zhí)行操作的對(duì)象
SqlCommand cmd = conn.CreateCommand();
}
//ScoreDAO實(shí)現(xiàn)
namespace Login.DAL
{
public class ScoreDAO
{
//更新分?jǐn)?shù)
public void UpdateScore(string userName, int value)
{
//實(shí)例化對(duì)象cnn,使用using會(huì)自動(dòng)關(guān)閉連接
using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))
{
//創(chuàng)建一個(gè)執(zhí)行數(shù)據(jù)庫(kù)操作的對(duì)象
SqlCommand cmd = conn.CreateCommand();
}
BLL層代碼實(shí)現(xiàn)
//中介者,接收UI層傳來(lái)的操作,需要數(shù)據(jù)訪問(wèn)時(shí)將數(shù)據(jù)傳給DAL層
public Login.Model.UserInfo UserLogin(string userName, string password)
{
//實(shí)例化一個(gè)DAL的用戶表對(duì)象
Login.DAL.UserDAO uDao = new Login.DAL.UserDAO();
}
數(shù)據(jù)模型Model代碼實(shí)現(xiàn)
//三層之間傳遞參數(shù)的數(shù)據(jù)模型
public class UserInfo
{
public int ID { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string Email { get; set; }
}
總結(jié)
- 上一篇: linux 安装绿色版的tomcat
- 下一篇: QQ兼容android版本6,QQ浏览器