三層架構
三層架構就是為了符合“高內聚,低耦合”思想,把各個功能模塊劃分為表示層(UI)、業務邏輯層(BLL)和數據訪問層(DAL)三層架構,各層之間采用接口相互訪問,并通過對象模型的實體類(Model)作為數據傳遞的載體,不同的對象模型的實體類一般對應于數據庫的不同表,實體類的屬性與數據庫表的字段名一致。 三層架構區分層次的目的是為了 “高內聚,低耦合”。開發人員分工更明確,將精力更專注于應用系統核心業務邏輯的分析、設計和開發,加快項目的進度,提高了開發效率,有利于項目的更新和維護工作。
數據訪問層(DAL),負責數據庫的交互。
業務邏輯層(BLL),封裝業務規則和邏輯。
表示層(UI),負責用戶界面的展示。
模型類(Model),存儲數據模型類
一個項目如果用到了三層架構,這就必然要涉及到數據庫,
?運行流程:
用戶通過界面層(UI)交互。
UI發送命令至業務邏輯層。
業務邏輯層根據需要處理數據,可能會與數據訪問層交互。
數據訪問層負責直接與數據庫交互,執行數據的CRUD操作。
處理完畢后,業務邏輯層將結果返回給UI層。
優點:
分工明確:每一層都有明確的職責分工,便于團隊開發和維護。
可測試性:每一層都可以單獨進行測試,提高了代碼的可測試性。
可維護性:每一層的改動不會影響到其他層,降低了維護難度。
靈活性:三層架構允許開發者靈活地更換任何一層,如更換UI層或者數據庫層。
性能優化:通過優化DAL層,可以提高數據訪問的性能。
實現三層架構
創建架構
使用類庫
Model
添加一個 .net6 類庫,取名?Model(存儲數據庫字段),在里面添加一個類 UserInfo
? ? namespace Model{public class UserInfo{public string? UserName { get; set; }public string? Password { get; set; }}}
DAL
添加一個 .net6 類庫,取名 DAL(數據訪問層),在里面添加一個類?SqlServerHelper,這里看你用的什么數據庫,如果是 mysql 就用 mysql 的查詢方式,c# 查詢 mysql 和 sqlserver 數據庫我都有寫相關的教程,有需要的可以去看看
? ? using System.Data;using System.Data.SqlClient;namespace SqlServer{internal class SqlServerHelper{/// <summary>/// 連接字符串/// </summary>private string strconn = string.Empty;public SqlServerHelper(string conn){//讀取配置文件//strconn = ConfigurationManager.AppSettings["Conn"].ToString();//strconn = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();strconn = conn;}/// <summary>/// 執行增刪改SQL語句/// </summary>/// <param name="cmdText">SQL語句</param>/// <returns></returns>public int ExecuteNonQuery(string cmdText){using (SqlConnection conn = new SqlConnection(strconn)){conn.Open();return ExecuteNonQuery(conn, cmdText);}}}}
BLL
添加一個 .net6 類庫,取名 BLL(業務邏輯層),由于后面的代碼需要獲取到數據庫數據,所以要添加 DAL 和 Model 程序集?的引用
? ? using DAL;using Model;using System.Data;namespace BLL{public class LoginHandle{/// <summary>/// 用戶登錄/// </summary>/// <param name="username">用戶名</param>/// <param name="password">密碼</param>/// <returns>是否能夠登錄</returns>public static bool UserLogin(string username, string password){DataTable dataTable = UserHandle.UserLogin(username, password);if (dataTable == null || dataTable.Rows.Count == 0){Console.WriteLine("查詢的數據為空");return false;}string? user = dataTable.Rows[0][0].ToString();string? pwd = dataTable.Rows[0][1].ToString();if (username.Equals(user) && password.Equals(pwd)){return true;}return false;}/// <summary>/// 獲取用戶的所有數據/// </summary>/// <param name="username"></param>/// <returns></returns>public static UserInfo? GetUserData(string username){DataTable dataTable = UserHandle.GetUserData(username);if (dataTable == null || dataTable.Rows.Count == 0){Console.WriteLine("查詢的數據為空");return null;}UserInfo userInfo = new UserInfo();userInfo .UserName = dataTable.Rows[0][0].ToString();userInfo .Password = dataTable.Rows[0][1].ToString();return userInfo;}}}
UI
I層就是創建項目時的 winform 項目,上面的工作完成后,配置大概就如下界面,需要將 BLL和 Model 層添加進來
? ? using BLL;using Model;namespace 三層架構Demo{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Button_Login_Click(object sender, EventArgs e){string username = TextBox_UserName.Text;string password = TextBox_Password.Text;if(string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password)){Console.WriteLine("輸入框不能為空");return;}//第一種方式bool result = LoginHandle.UserLogin(username, password);if(result){Console.WriteLine("登錄成功!");//跳轉界面//....}else{Console.WriteLine("登錄失敗");}//第二種方式UserInfo? userInfo = LoginHandle.GetUserData(username);if(userInfo != null){if(userInfo.Password != password){Console.WriteLine("密碼不正確");return;}Console.WriteLine("登錄成功!");}}}}