三层架构

it2025-02-25  31

三层架构的概念

三层架构就是将整个业务分成:界面层、业务逻辑层和数据访问层。这样做是为了实现“高内聚 低耦合”的思想,同时提高程序安全性。 耦合是指模块之间的联系,如果模块间联系越深,到时候修改的时候会牵扯很多方面,操作会变得十分复杂。内聚是指模块内部的代码之间的联系,内聚越高,模块独立性越好。

三层架构的结构

①显示层(UI):用户看到的界面。向用户展示特定的业务数据,同时采集用户的信息和操作; ②业务逻辑层(BLL):从显示层获取命令和数据,执行业务逻辑。将获取的数据通过数据访问层写入。从数据访问层获取数据并显示在显示层。 ③数据访问层(DAL):和数据源进行交互。执行对数据的操作(增删改查)。 此外再往下细分可以分出数据对象层。就是记录数据的载体,通常一个数据表就是一个数据对象,以上的三层都可以引用数据对象层。

举例

下面以一个登录的小例子,展示一下三层是如何具体使用的。 UI层:

public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btnLogin_Click(object sender, EventArgs e) { //获取输入的用户名和密码 string userName = txtUserName.Text.Trim(); string userPassword = txtPassword.Text; Login.BLL.LoginManager mgr = new Login.BLL.LoginManager(); //调用B层的登录方法,从B层返回user的信息 UserInfo user = mgr.Login(userName, userPassword); MessageBox.Show("登录用户:" + user.UserName); } }

BLL层:

public class LoginManager { public UserInfo Login(string userName,string password) { //实例化UserDao UserDAO uDao = new UserDAO(); //调用UserDao的查询用户方法 UserInfo user = uDao.SelectUser(userName, password); //如果用户存在,就返回对应值;否则就抛出异常 if (user != null) { return user; } else { throw new Exception("登录失败。"); } } }

DAL层:

public class UserDAO { /// <summary> /// 查询用户是否存在并返回用户信息 /// </summary> /// <param name="userName">用户名</param> /// <param name="password">密码</param> /// <returns></returns> public UserInfo SelectUser(string userName,string password) { using (SqlConnection conn = new SqlConnection(DbUtil.ConnString)) { SqlCommand cmd = conn.CreateCommand(); //获取执行的SQL语句 或表名 或存储过程名 cmd.CommandText = @"SELECT ID,UserName,Password,Email FROM USERS WHERE UserName=@UserName AND Password=@Password"; //指示执行的是存储过程还是sql语句,默认执行语句 cmd.CommandType = CommandType.Text; cmd.Parameters.Add(new SqlParameter("@UserName", userName)); cmd.Parameters.Add(new SqlParameter("@Password", password)); conn.Open(); SqlDataReader reader = cmd.ExecuteReader(); UserInfo user = null; while (reader.Read()) { if (user == null) { user = new 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; } } }
最新回复(0)