三层登录

前言

       通常意义上的三层架构就是将整个业务应用划分为:显示层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分三层的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。 

显示层UI(User Interface layer)

  • UI的作用:

向用户展现特定业务数据

采集用户的输入信息和操作

  •  UI设计的原则:

用户至上,兼顾简洁 

  • UI中常用的技术: 

WindowsForm: Form、Control

ASP.NET:aspx、ascx、master、html

我的理解:比如登录,界面显示让用户输入用户名和密码,就是向用户展现特定业务数据;用户通过UI层输入用户名和密码,就是采集用户的输入信息和操作。

private void btnLogin_Click(object sender, EventArgs e)
{    
    try
    {
        string userName = txtUserName.Text.Trim();
        string password = txtPassword.Text;
        //实例化一个业务层的LoginManager,用于逻辑判断
        Login.BLL.LoginManager mgr=new Login.BLL.LoginManager();
        //实例化一个业务层的Model,用于给userLogin赋值name,password
        Login.Model.UserInfo user=mgr.UserLogin(userName,password);
        MessageBox.Show("登录用户:" + user.UserName);//显示登录信息
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }    
}

 业务逻辑层BLL(Business Logic Layer)

  • BLL 的作用:

从DAL中获取数据,以供UI先使用

从UI中获取用户指令和数据,执行业务逻辑

从UI中获取用户指令和数据,通过DAL写入数据源

  •  BLL的职责机制:

第一种:UI->BLL->UI

第二种:UI->BLL->DAL->BLL->UI

我的理解:从UI层获取用户名和密码,传给BLL进行业务逻辑处理后把数据传给DAL,DAL把结果返回给BLL,BLL提交给UI层,UI层显示登录成功与否。

//管理登录类,用于判断用户是否登录成功
public class LoginManager
{
    //UI层传递的是UserInfo方法,数据是Username,password
    public Login.Model.UserInfo UserLogin(string userName,string password)//userLogin方法,判断登录信息是否正确
    {            
        Login.DAL.UserDAO uDao = new Login.DAL.UserDAO();//呼叫数据源,获取相应数据
        Login.Model.UserInfo user= uDao.SelectUser(userName, password);//实例化一个Model,用于给数据层的SelectUser赋值
        if (user!=null)//login successfully.
        {
            //如果登陆成功,则增加10点积分
            Login.DAL.ScoreDAO sDao = new Login.DAL.ScoreDAO();
            sDao.UpdateScore(userName, 10);
            return user;
        }
        else
        {
            throw new Exception("登录失败。");
        }
    }
}

数据访问层DAL(Data Access Layer) 

  •  DAL的作用:

从数据源加载数据(Select)

向数据源写入数据(Insert/Update)

从数据源删除数据(Delete)

  • DAL中常用的技术 

ADO.NET+SQL语句

O/R Mapping框架 Nhiberate

访问SQL Server数据库时Link to SQL 

我的理解:DAL就是对数据进行增删改查。

 部分DAL层代码如下:

namespace Login.DAL
{
    //数据访问对象
    public class UserDAO
    {
        //根据userName和password返回一个布尔值
        public Login.Model.UserInfo SelectUser(string userName,string password)
        {
            using (SqlConnection conn = new SqlConnection(DbUtil.ConnString)) 
            {
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandText = @"SELECT ID,UserName,Password,Email FROM USERS WHERE UserName=@UserName AND Password=@Password";
                cmd.CommandType = CommandType.Text;//设置CommandType属性为Text,使其只执行SQL语句文本形式
                cmd.Parameters.Add(new SqlParameter("@UserName", userName));
                cmd.Parameters.Add(new SqlParameter("@Password", password));              

                conn.Open();//打开连接
                //创建数据读取对象,循环读取数据
                SqlDataReader reader = cmd.ExecuteReader();//此方法用于用户进行的查询操作,使用SqlDataReaderd对象的Read()方法进行逐行读取
                //设置user的默认值为null
                Login.Model.UserInfo user = null;
                 while (reader.Read())//遍历读取出的数据库中的数据
                {
                    if (user==null)
                    {
                        //如果user是null的话,则延迟加载
                        user = new Login.Model.UserInfo();
                    }
                    user.ID = reader.GetInt32(0);//获取指定列的32位有符号整数形式的值
                    user.UserName = reader.GetString(1);
                    user.Password = reader.GetString(2);//not suggestion不建议
                    //如果Email不是null的话,才可以去读
                    if (!reader.IsDBNull(3))
                    {
                        user.Email = reader.GetString(3);
                    }
                }
                return user;
            }
        }
    }
}
namespace Login.DAL
{
    //数据访问对象。每成功登录一次用户,增加10点积分
    public class ScoreDAO
    {
        public void UpdateScore(string userName,int value)
        {
            //有了using以后,connection就可以自动关闭了
            using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))
            {
                SqlCommand cmd = conn.CreateCommand();//创建命令
                cmd.CommandText = @"INSERT INTO SCORES(UserName,Score) Values(@UserName,@Score)";
                cmd.Parameters.Add(new SqlParameter("@UserName", userName));
                cmd.Parameters.Add(new SqlParameter("@Score", value));

                conn.Open();//打开连接
                cmd.ExecuteNonQuery();//执行SQL语句,并返回受影响的行数
            }                         
        }
    }
}

什么情况下需要使用 

 当业务复杂到一定程度时,当数据存储到一个独立的数据存储介质,才需要三层架构。

具体应用——原则

  • DAL只提供基本的数据访问,不包含任何业务相关的逻辑处理;
  • UI只负责显示和采集用户操作,不包含任何业务相关的逻辑处理;
  • BLL负责处理业务逻辑。通过获取UI传来的操作指令,决定执行业务逻辑,在需要访问数据源的时候直接交给DAL处理。处理完成后,返回必要数据给UI。

感谢您的阅读~

发布了70 篇原创文章 · 获赞 17 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/hsm_Jasmine/article/details/103377008