溫故而知新---淺析三層架構(一個超簡單的系統登錄三層架構實例)
剛開始接觸三層架構是在快兩個月前,那時候找了好多例子感覺也都看不怎麽懂,今天閑著沒事,就把以前學的東西翻出來,算是溫習溫習。由於本人也接觸時間不長,所以以下言論有不正確之處,多多海涵。
首先我們先要知道什麽是三層架構,個人理解的三層架構就是將業務分為界面層(UI層),業務邏輯層(BLL層)和數據訪問層(DAL層),各層之間各司其職,層層傳遞信息。
優點是可以達到高內聚,低耦合,修改起來比較容易;缺點是會降低系統性能。
UI層:就是面向用戶的一層,直接與用戶交互。
BLL層:用於實現業務邏輯,在UI層和DAL層中間。
DAL層:與數據庫進行交互。
如圖:
接下來就開始我們的項目吧!
打開VS,新建windows窗體應用程序,命名為ThreeLayers。
右鍵解決方案-----添加-----新建項目----類庫,命名為:DAL
同樣方式,再添加兩個項目名為BLL和Model,修改各層的名字如圖所示:
接下來,就要添加引用,右鍵UI----添加----引用,如圖所示
選擇BLL和Model,確定。同樣,給BLL層引用DAL和Model,給DAL層引用Model和using System.Data.SqlClient。可在程序集----搜索解決方案處搜索引用。
接下來,打開UI層的Form1,對界面進行編輯,如圖:
就是兩個label,兩個TextBox,一個button,可以在菜單的視圖----工具箱裏面找到。右鍵用戶的輸入框----屬性,如下圖所示,修改Name為:ID;同樣修改密碼輸入框的Name為:Pass。
界面弄好之後,我們再看一看數據庫方面,這個示例用的是SQL Server 數據庫,在數據庫中創建一個如下圖的表,保存,就可以著手寫代碼了。
代碼如下:
UI層:
using System; using System.Collections.Generic; using System.ComponentModel;using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace ThreeLayers { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //獲取輸入的用戶名和密碼 string UserCode = ID.Text.Trim(); string PassWord = Pass.Text; BLL.bll bb = new BLL.bll(); int uu = bb.Select(UserCode, PassWord); if (uu == 0) { MessageBox.Show("登陸成功!"); }else if (uu ==1 ){ MessageBox.Show("密碼錯誤!"); }else if (uu == 2){ MessageBox.Show("無此用戶!"); } } } }
BLL層:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using UI; namespace BLL { public class bll { public int Select(string UserCode,string PassWord) { DAL.dal dd = new DAL.dal(); model mm = dd.Select(UserCode, PassWord); //將輸入的信息和從數據庫查到的信息做對比 if (mm != null && mm.UserCode == UserCode) { if (mm.PassWord == PassWord) { return 0; } return 1; } return 2; } } }
DAL層:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; using UI; namespace DAL { public class dal { //數據庫連接命令。server後邊的.是本地服務器的意思,相當於localhost ,為了方便寫成了“.”, //initial catalog後面是你數據庫的名字,uid是你數據庫的登錄名,pwd是登錄密碼。 string ConText = "server=.;initial catalog= ljndba; uid =chouningning; pwd=chouningning"; public model Select(string UserCode,string PassWord) { model mm = null; try { SqlConnection con = new SqlConnection(ConText); con.Open(); //Ning是剛才你建的表的名字 SqlCommand cmd = new SqlCommand("select * from Ning where UserCode=‘"+UserCode+"‘",con); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { if (mm == null) { mm = new model(); } mm.UserCode = reader.GetString(0); mm.PassWord = reader.GetString(reader.GetOrdinal("PassWord")); } }catch(Exception ex){ } return mm; } } }
Model層:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace UI { public class model { public string UserCode { get; set; } public string PassWord { get; set; } } }
最後運行結果如下:
第一次寫博,不足之處,多多包涵!
溫故而知新---淺析三層架構(一個超簡單的系統登錄三層架構實例)