1. 程式人生 > >C#三層架構詳解--以系統登入為例

C#三層架構詳解--以系統登入為例

引言

        通常意義上的三層架構是將真個業務應用劃分為:介面層(UI層)、業務邏輯層(B層)、資料訪問層(D層)。對於複雜的系統分層讓結構清晰,便於開發人員對系統進行整體的理解、把握;而且便於維護,系統基本的架構可以通過工具自動生成程式碼。當資料庫發生改變時,只用重新生成程式碼,改動業務邏輯層的部分程式碼即可。下面筆者通過一個簡單的登入例項來給大家介紹一下三層架構

簡介


        對比以上兩張圖片,我們可以看出:

       (1)資料庫好比豬圈,所有的豬都有序地按區域或編號,存放在不同的豬欄裡

       (2)DAL好比是屠宰場 ,把豬從豬圈取出來進行(處理)屠殺,按要求取出相應的部位(欄位),或者進行歸類整理(統計),形成整箱的豬肉(資料集),傳送給食品加工廠( BLL )。本來這裡都是同一夥人既管抓豬,又管殺豬的,後來覺得效率太低了,就讓一部分人出來專管抓豬了( DBUtility ),根據要求來抓取指定的豬

       (3)BLL 好比食品加工廠 ,將豬肉深加工成各種可以食用的食品(業務處理)

       (4)UI 好比商場 ,將食品包裝成漂亮的可以銷售的產品,展現給顧客( UI 表現層)

       (5)豬肉好比 Model ,無論是哪個廠(層),各個環節傳遞的本質都是豬肉,豬肉貫穿整個過程

       (6)通用類庫 Common 相當於工人使用的各種工具,為各個廠(層)提供諸如殺豬刀、繩子、剪刀、包裝箱、工具車等共用的常用工具(類)。其實,每個部門本來是可以自己製作自己的工具的,但是那樣會使效率比較低,而且也不專業,並且很多工作都會是重複的。因此,就專門有人開了這樣的工廠來製作這些工具,提供給各個工廠,有了這樣的分工,工廠就可以專心做自己的事情了

實戰-系統登入例項

       下面是資料在三層中的一個具體走向圖,這對於我們瞭解三層有很大的幫助


1、三層應用原則

        (1)DAL層只提供基本的資料訪問,不包含任何的業務邏輯

        (2)UI層只負責顯示和採集使用者操作,不包含任何業務相關的邏輯處理

        (3)BLL層負責處理業務邏輯。通過獲取UI傳來的使用者指令,執行業務邏輯,在需要訪問資料來源的時候,直接交給DAL進行處理,處理完成後,返回必要資料給UI層

2、前期準備

      (1)UML圖


      (2)根據UML圖的關係,構建三層框架


      (3)建立資料庫,UserInfo表


3、程式碼實現

        (1)使用者介面(LoginUI)

          向用戶展現特定的業務資料,採集使用者輸入的資訊和操作

         
namespace LoginUI
{
    public partial class frmLogin : Form
    {
        public frmLogin()
        {
            InitializeComponent();
        }

        private void btnLogin_Click(object sender, EventArgs e)
        {
            //UI層將使用者輸入資料傳遞給BLL層
            string userName = txtUserName.Text.Trim();
            string password = txtPassword.Text;
            Login.BLL.LoginManager mgr = new Login.BLL.LoginManager();
            Login.Model .UserInfo user= mgr.UserLogin (userName, password);

            //UI層返回業務層傳遞的資料給使用者
            MessageBox.Show("登入使用者:" + user.UserName);
        }
    }
}

        (2)業務邏輯層(LoginBLL)

         從DAL獲取資料,提供UI顯示;從UI獲取使用者和指令,執行業務邏輯;從UI獲取使用者和指令,通過DAL寫入資料

         
namespace LoginBLL
{
    public class LoginManager
    {
        public Login.Model.UserInfo UserLogin(string userName,string password)
        {
            Login.DAL.UserDAO  uDao = new Login.DAL.u ();   //例項化DAL層
            Login.Model.UserInfo user = uDao.SelectUser(userName, password);

            //不需要訪問資料來源,直接執行業務邏輯
            if (user != null)
            {
                return user;
            }
            else
            {
                throw new Exception("登入失敗");
            }
        }
    }
}

        (3)資料訪問層(LoginDAL)

         SELECT、INSERT/UPDATE、DELETE

         
namespace LoginDAL
{
    public class UserDAO
    {
        public Login.Model.UserInfo SelectUser(string userName, string Password)
        {
            //建立資料庫連線
            string ConnString = @"Server =192.168.24.45;DataBase =Login; User ID =sa ;Password =123";
            using (SqlConnection conn = new SqlConnection(ConnString))
            {
                //執行SQL語句進行查詢
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandText = @"SELECT ID,UserName,Password,Email FROM UserInfo WHERE UserName [email protected] AND Password [email protected]";
                //輸出查詢結果
                cmd.CommandType = CommandType.Text;

                //新增兩個引數
                cmd.Parameters.Add(new SqlParameter(@"UserName", userName));
                cmd.Parameters.Add(new SqlParameter(@"Password", Password));

                conn.Open();
                SqlDataReader reader = cmd.ExecuteReader();

                Login.Model.UserInfo user = null;

                //讀取具體的資料
                while (reader.Read())
                {
                    if (user == null)
                    {
                        user = new Login.Model.UserInfo();
                    }
                    //讀取查詢到的資料
                    user.ID = reader.GetInt32(0);
                    user.UserName = reader.GetString(1);
                    user.Password = reader.GetString(2);
                    if (!reader.IsDBNull(3))
                    {
                        user.Email = reader.GetString(3);
                    }
                }
                return user; 
                }
            }           
        }
    }
}

        (4)實體(LoginModel)

         封裝資料,使資料在三層中傳輸,更傾向於業務邏輯層

         
namespace Login.Model
{
    public class UserInfo
    {
        //定義使用者屬性
        public int ID { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }
        public string Email { get; set; }
    }
}

結語

       再次學習三層架構,又有了不一樣的認識和理解。在實踐操作中體會更加深刻。以上是我再次學習三層架構的總結和理解。如有不同見解,歡迎指正

相關推薦

C#架構--系統登入

引言         通常意義上的三層架構是將真個業務應用劃分為:介面層(UI層)、業務邏輯層(B層)、資料訪問層(D層)。對於複雜的系統分層讓結構清晰,便於開發人員對系統進行整體的理解、把握;而且便於維護,系統基本的架構可以通過工具自動生成程式碼。當資料庫發生改變時,只用

Java Web 架構

王飛翔_ java 三層架構ssh 一個spring2.5+hibernate3.2+struts2.0組合框架,使用spring的 IoC來管理應用的 所有bean,包括struts2的 action,充分發揮了spring輕量級框架的 優勢。  摘 要:

JavaWeb架構

什麼是三層架構? 三層架構(3-tier architecture) 通常意義上的三層架構就是將整個業務應用劃分為:介面層(User Interface layer)、業務邏輯層(Business Logic Layer)、資料訪問層(Data access layer

asp.net架構

一、資料庫 /*==============================================================*/ /* DBMS name:      Microsoft SQL Server 2000         

B/S系統MVC與結構

我們平時總是將三層架構與MVC混為一談,殊不知它倆並不是一個概念。 下面我來為大家揭曉我所知道的一些真相。 首先,它倆根本不是一個概念。 三層架構是一個分層式的軟體體系架構設計,它可適用於任何一個專案。 MVC是一個設計模式,它是根據專案的具體需求來決定是否適

關於C#架構增刪改查中的“刪除”問題

正在 font com 時間 convert strong int32 ring 三層架構 序: 剛學習C#,經過一段時間學習,現在正在做一個簡單的前後臺聯通的項目(主要是C#三層架構實現增刪改查)。分享一點兒小經驗,也供自己以後可以回頭看看自己的碼農之路。 內容: 主要分

關於C#架構增刪改查中的“查詢”問題

可能 一行 rep tro spa 結束 簡單 問題: .get 序:問題總是反復出現,可能只是一個小小的問題,但是就像肉中刺。 問題: 關於“姓名”字段的拼接問題 姓名字段的拼接:this.Repeater1.DataSource = db.GetList(" UNa

Java架構-分散式系統本質:“分治”和“冗餘”

站在全域性角度看,分散式系統的本質是什麼?其實說白了,就是兩點:“分治”和“冗餘”。 分治和冗餘使得分散式系統具備了核心價值,那麼它的價值是什麼? 分散式系統的價值 談到分散式系統的價值,可能就得從 1953 年說起了。在這一年,埃布·格羅希(Herb Grosch)提

C#--架構設計方法(一)

三層架構的應用背景 系統功能較多而且業務複雜時,可以使用三層架構設計專案: BLL可以起到一個‘調節作用’,三層架構的設計能夠很好的滿足大、中型應用系統開發。 三層架構的應用準

Cisco 交換

更改 轉發 鏈路 操作 for 成了 劃分 硬件 com 當公司網絡規模較小、劃分的VLAN比較少時,可能單臂路由就可以滿足各VLAN間的通信,但是當VLAN較多、網絡規模比較大時。那麽使用單臂路由技術就顯得有點力不從心了,這是我們就要引入三層交換機了。 現在大多數新型的c

msql sql_model (laravel5.6

在我們使用mysql 的時候總會用到 group by  那麼 我們有些時候需要查詢group by  之外的欄位  一 ERR 1067引發的血案        今天在Navicat中執行sql語句建立資料表出現了錯誤Err 1067。而這條語句在有些同事的mysql上

第三方登入之QQ登入(二)——OAuth2.0處理流程介紹(QQ登入

為了讓網站更快接入,騰訊提供了JS SDK的接入方案,具體點選這裡或者點選這裡進行檢視。不過也可以自己寫程式碼,當然你需要了解QQ的OAuth2.0的處理流程(Web Server Flow)。OAuth2.0的處理流程:點選這裡檢視官方Wiki。1.授權:獲取授權碼Auth

企業網架構BCMSN

    實驗要求:   1.內網IP為172.16.0.0/16;外網IP隨意 2.埠安全 3.R2與SW1以及SW2之間為三層介面,連線HTTP伺服器的SW1與SW2的介面也為三層 4.所有的內網PC可以訪問外網PC 5.外網PC

SpringMvc架構註解@Controller、@Service和@Repository

1. @Controller控制層 2. @Service() 3. @Repository持久層 springvmc採用經典的三層分層控制結構,在持久層,業務層和控制層分別採用@Repository、@Service、@Controller對分層中

C#專案實戰】學生社團資訊管理系統(MVC架構

程式碼很多,就不再此貼出。 本來打算寫教程的,無奈沒有時間。 參考帖子:【C#】簡單三層架構(MVC)實現學生資訊管理 有視訊教程,完整程式碼,建議初學者先看這篇。 學生社團資訊管理系統功能介紹: 1.實現了對資料庫的增刪查改 2.影象資訊儲存在資料庫,支援修改。 3

【Asp.Net MVC+EF+架構)MVC VS 架構

前言:        接著上篇部落格說:MVC和三層架構到底是怎麼樣的一個關係?相同?或是迥異?或是部分相同,部分不同?或是思想同,邏輯不同?這是個值得思考的問題。關於三層架構大家應該差不多都有些瞭解

【Asp.Net MVC+EF+架構(一)初見

前言: 這個專案是小編我進入公司開始全面重頭開始著手的第一個專案,在寶寶的IT生涯裡這是一個里程碑,有著與眾不同的意義。那麼在之後小編會從頭至尾的寫一組關於Asp.Net MVC+EF+三層架構框架

asp.net架構連線Oracle 11g

asp.net三層架構連線Oracle 11g 連線Oracle時使用微軟的Oracle連線元件; 一 DAL層 using System; using System.Collections.Generic; using System.Text; using System

OSI七與TCP/IP五網絡架構

p地址 tro 簡單 流控 之間 模型 網卡 層次結構 user OSI和TCP/IP是很基礎但又非常重要的網絡基礎知識,理解得透徹對運維工程師來說非常有幫助。今天偶又復習了一下:   (1)OSI七層模型   OSI中的層 功能 TCP/IP協議族   應用層 文件傳輸,

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

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