WPF三层架构的搭建
開發工具與關鍵技術: Visual Studio 2019、C#語言、WPF、MVC三層架構
作者:鄧李慶
撰寫時間: 2021年2月08日
小編首先來給大家介紹一下,什么是三層架構:三層架構就是為了符合“高內聚,低耦合”思想,把各個功能模塊劃分為表示層(UI)、業務邏輯層(BLL)和數據訪問層(DAL)三層架構,各層之間采用接口相互訪問,并通過對象模型的實體類(Model)作為數據傳遞的載體,不同的對象模型的實體類一般對應于數據庫的不同表,實體類的屬性與數據庫表的字段名一致。
三層架構區分層次的目的是為了“高內聚,低耦合”。開發人員分工更明確,將精力更專注于應用系統核心業務邏輯的分析、設計和開發,加快項目的進度,提高了開發效率,有利于項目的更新和維護工作。
一、 界面層(UI)
界面層提供給用戶一個視覺上的界面,通過界面層,用戶輸入數據、獲取數據。界面層同時也提供一定的安全性,確保用戶不用看到不必要的機密信息。
二、 邏輯層(BLL)
邏輯層是界面層和數據層的橋梁,它響應界面層的用戶請求,執行任務并從數據層抓取數據,并將必要的數據傳送給界面層。
三、 數據層(DAL)
數據層定義、維護數據的完整性、安全性,它響應邏輯層的請求,訪問數據。這一層通常由大型的數據庫服務器實現,如Oracle 、Sybase、MS SQl Server等
三層架構的體系結構:表示層和業務邏輯層之間用對象模型的實體類對象來傳遞數據,業務邏輯層和數據訪問層之間用對象模型的實體類對象來傳遞數據,數據訪問層通過.NET 提供的ADO.NET組件來操作數據庫,或者利用SQLServer數據庫服務器的存儲過程來完成數據操作,這種分層體系結構具有以下四個優點:
(1)避免了表示層直接訪問數據訪問層,表示層只和業務邏輯層有聯系,提高了數據安全性。
(2)有利于系統的分散開發,每一個層可以由不同的人員來開發,只要遵循接口標準,利用相同的對象模型實體類就可以了,這樣就可以大大提高系統的開發速度。
(3)方便系統的移植,如果要把一個 C/S 的系統變成 B/S 系統,只要修改三層架構的表示層就可以了,業務邏輯層和數據訪問層幾乎不用修改就可以輕松的把系統移植到網絡上。
(4)項目結構更清楚,分工更明確,有利于后期的維護和升級
缺點:
(1)降低了系統的性能。這是不言而喻的。如果不采用分層式結構,很多業務可以直接造訪數據庫,以此獲取相應的數據,如今卻必須通過中間層來完成。
(2)有時會導致級聯的修改。這種修改尤其體現在自上而下的方向。如果在表示層中需要增加一個功能,為保證其設計符合分層式結構,可能需要在相應的業務邏輯層和數據訪問層中都增加相應的代碼
(3)增加了代碼量,增加了工作量
下面來搭建一個簡單的三層架構登錄頁面,我使用的是Visual Studio 2019搭建。注:VS2017、VS2015和VS2010差不多沒太大改變。首先創建一個表現層(UI):
四、 然后選擇中解決方案右鍵添加 > 新建項目 > 找到類庫創建。BLL(邏輯層)、DAL(數據層)再創建一個Model(實體數據庫)如圖:
搭建完成如下圖:
搭建完成后需要添加引用,注:表現層(UI)引用BLL和Model,邏輯層(BLL)引用DAL和Model,數據訪問層(DAL)引用Model。如何圖:
然后在邏輯層(BLL)創建一個類,取名為“UserService”,再到數據訪問層(DAL)也創建一個類“DALMethod”,然后再到實現實體數據庫(Model),創建一個類“UserLogin”
到數據訪問層(DAL)類“DALMethod”里面寫上查詢語句:
到邏輯層(BLL)類“UserService”里面寫上處理的語句:
using ItcastCater.DAL; using ItcastCater.Model; using System; using System.Data.SqlClient;namespace ItcastCater.BLL//業務邏輯層 {public class UserService{//獲取用戶信息public UserLogin GetUser(string strAccount, string strPassword){//查詢語句string sql = "select * from PW_User where Account=@Account";//實例化對象數組(序列化參數)SqlParameter[] param = new SqlParameter[]{ //定義傳遞參數,以及傳遞參數的類型new SqlParameter("@Account",strAccount),new SqlParameter("@Password",strPassword),};// 執行UserLogin user = new UserLogin();//調用數據訪問層using (SqlDataReader sdr = DALMethod.ExecuteReader(sql, param)){while (sdr.Read()){user.UserID = Convert.ToInt32(sdr["UserID"]);user.Account = sdr["Account"].ToString();user.Password = sdr["Password"].ToString();user.Name = sdr["Name"].ToString();user.Time = sdr["Time"].ToString();user.Employ = Convert.ToBoolean(sdr["Employ"]);}return user;}}} }到表現層(UI)在登錄按鈕方法中寫:
private void Button_Click(object sender, RoutedEventArgs e){try{//實例化邏輯層BLL.UserService Service = new BLL.UserService();//獲取頁面數據判斷是否為空if (Account.Text.Trim() != string.Empty && Password.Password.Trim() != string.Empty){//獲取頁面數據的賬號string strAccount = Account.Text.Trim();//將用戶輸入的密碼進行AES256加密法加密string strPassword = AESEncryptHelper.Encrypt(Password.Password.Trim());//調用邏輯層UserLogin user = Service.GetUser(strAccount, strPassword);//判斷數據是否與數據庫的數據相同if (user.Account == strAccount || user.Password == strPassword || user.Employ == true){MessageBox.Show("登入成功!!!", "提示", MessageBoxButton.OK);//提取返回的數據(用戶姓名)string strName = user.Name.ToString().Trim();//實例化主頁面并賦值MainWindow main = new MainWindow(strName);//打開另外一個窗口main.Show();//關閉當前窗口this.Close();}else{MessageBox.Show("該用戶不存在!!!", "提示", MessageBoxButton.OK, MessageBoxImage.Error);}}else{MessageBox.Show("賬號或密碼不能為空!", "提示", MessageBoxButton.OK, MessageBoxImage.Error);}}catch (Exception){MessageBox.Show("請連接網絡!", "提示", MessageBoxButton.OK, MessageBoxImage.Error);}}最后登錄的效果如下:
感謝收看
總結
以上是生活随笔為你收集整理的WPF三层架构的搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网页小图标的制作
- 下一篇: 设计模式-工厂设计模式