1. 程式人生 > >溫故而知新---淺析三層架構(一個超簡單的系統登錄三層架構實例)

溫故而知新---淺析三層架構(一個超簡單的系統登錄三層架構實例)

lda code windows comm 面向 box reader 業務 兩個

剛開始接觸三層架構是在快兩個月前,那時候找了好多例子感覺也都看不怎麽懂,今天閑著沒事,就把以前學的東西翻出來,算是溫習溫習。由於本人也接觸時間不長,所以以下言論有不正確之處,多多海涵。

首先我們先要知道什麽是三層架構,個人理解的三層架構就是將業務分為界面層(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;
        }
    }
}

最後運行結果如下:

技術分享技術分享技術分享

第一次寫博,不足之處,多多包涵!

溫故而知新---淺析三層架構(一個超簡單的系統登錄三層架構實例)