c#三层架构登陆实例

很早之前,就听说过三层结构了。当时只知道 三层结构 是把 系统的 界面  跟 数据库操作等不相关的程序分别开来。原来这么简单的实现,确实传说中的 三层结构啊。

     首先,先来看一下是哪三层。表示层(UI,User Interface),业务逻辑层(BLL BusinessLogicLayer),数据访问层(DAL Data Access Layer)。三层的划分是物理上的划分。

     表示层(UI),这个最容易理解,就是用户看到的主界面。

     数据访问层(DAL),也不难理解,主要是负责数据的增删改查。

     业务逻辑层(BLL),算是表示层和数据访问层的桥梁吧。里面主要存放一些业务流程。也就是逻辑。主要作用就是从DAL中获取数据,然后显示到UI上。

     举一个例子,三层结构可以用饭店的实例来理解。

UI 指的是服务员, BLL 是厨师, DAL 是采购员。

     在顾客的眼里,只能看到服务员为他们服务。并不知道后台厨师和采购员 是如何做的。对于上述三种不同的角色来说,无论哪个环节出了问题,只需要更换一个员工就可以照常营业的。

三层架构的优势,还是职责分离,降低耦合。

     接下来,看一个使用三层结构的登陆实例。首先,需要声明一下。这个实例中有很多 bug 需要优化。不过对于展示三层的主要思想足够了。仅仅是一个实例而已。

数据库表:

这是数据模块图:

细心的读者肯定会发现,除了 UI,BLL,DAL 这三个之外还有一个 Moudel 存在,这个 Moudel 不属于任何一层,只是为了更好地链接三层而存在的。这个类只存储,与以上三类共同使用的东西。起一个 协调的作用。 Moudel 类,也就是实体类。

     下面是这几个层次的关系。

接下来需要看一下,他们分别是如何实现各自的分工的。

UserModel类:

namespace LoginModel
{
    /// <summary>
    /// 实体类,用于保存用户信息
    /// </summary>
    public class UserModel
    {
        public int Id { get; set; }
        public string UserName { get; set; }
        public string UserPwd { get; set; }
    }
}

UI层:

private void btnLogin_Click(object sender, EventArgs e)
{
    try
    {
        ////取出用户界面的数据
        string userName = txtUserName.Text.Trim();
        string userPwd = txtUserPwd.Text;
        UserBLL userBll = new UserBLL();//实例化一个业务逻辑层BLL
        UserModel userModel = userBll.UserLogin(userName, userPwd);//使用用户界面数据,进行查找BLL数据
        MessageBox.Show("登陆用户:" + userModel.UserName);
    }
    catch (Exception ex) //如果登陆有异常 则登陆失败
    {
        MessageBox.Show(ex.Message);
    }
}

BLL层:

namespace LoginBLL
{
    /// <summary>
    /// //业务逻辑层
    /// </summary>
    public class UserBLL
    {
        public UserModel UserLogin(string userName, string userPwd)
        {
            UserDAL userDal = new UserDAL();//实例化一个数据访问层
            UserModel user = userDal.SelectUser(userName, userPwd);////通过ui中填写的内容 返回来相应的数据
            if (user != null)
            {
                return user;//如果数据库中有数据,则返回一个实体类
            }
            else
            {
                throw new Exception("登陆失败");
            }
        }
    }
}

DAL层:

 UserDAL类:

namespace LoginDAL
{
    public class UserDAL
    {
        ////根据 ui 选择返回一个user
        public UserModel SelectUser(string userName, string userPwd)
        {
            using (SqlConnection conn = new SqlConnection(DbUtil.connString))
            {
                //创建一个命令对象,并添加命令
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandText = @"select Id,UserName,UserPwd from T_UserInfo where UserName=@UserName and UserPwd=@UserPwd";
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.AddWithValue("@UserName",userName);
                cmd.Parameters.AddWithValue("@UserPwd", userPwd);
                conn.Open();//打开数据链接
                SqlDataReader reader = cmd.ExecuteReader();
                UserModel user = null; //用于保存读取的数据
                while (reader.Read()) //开始读取数据
                {
                    if (user == null) //如果没有,则重新生成一个
                    {
                        user = new UserModel();
                    }
                    user.Id = reader.GetInt32(0);
                    user.UserName = reader.GetString(1);
                    user.UserPwd = reader.GetString(2);
                }
                return user;
            }
        }
    }
}

DbUtil类:

namespace LoginDAL
{
    /// <summary>
    /// //数据访问层,用于保存 链接服务器的sql语句
    /// </summary>
    class DbUtil
    {
        public static string connString = @"Server=xxx;Database=xx;User ID=sa; Password=123";
    }
}

 

转载于:https://www.cnblogs.com/genesis/p/4919889.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值