【C#】—三层总结

本文介绍了C#的三层架构,包括表现层、业务逻辑层和数据访问层,并阐述了分层的原因,如团队协作、代码规范和数据库独立性。通过生活中的比喻,如服务员、厨师和助手的角色,帮助理解各层职责。最后,通过登录功能的例子进一步说明三层架构的实现,并以人生三境界作结,强调理解本质的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

三层敲完之后,有很多不理解的,代码直接看的视频并不知道之间的值是怎么传的,后来逐句调试了几遍,把每句话的代码基本都写上了,逐渐理解了。

三层是什么

三层架构把整个软件分为了三个层次:表现层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Date access layer)

  • UI层称为表现层,像用户展示特定的业务数据,收集用户的信息(如用户名密码),最接近用户。

  • BLL称为业务逻辑层,对UI提供方法,调用DAL层提供的方法,判断执行逻辑

  • DAL层称为数据访问层,仅包含对数据库进增删改查
    如图:
    在这里插入图片描述

为什么分三层

  • 方便团队分工,一个程序员单独完成一个软件不是不可以的,但是大型软件需要软对的配合,问题是每个程序员编写风格不一样,就会造成后期调试和维护比较困难,软件分层后,合理分工,这样的问题迎刃而解

  • 代码规范,在开发软件时对每个层的代码进行规范,固定开发语言风格

  • 忽略数据库差异,当软件系统要换数据库时,只要将数据访问层的代码修改就好了

  • 实现“低耦合,高内聚”。把问题划分开来各个解决易于控制,延伸,分配资源。
    分层后代码逻辑也清晰了,优点很多呀,相信每个人都有自己不同的体会和感受

生活中的理解

  • 用户:相当于食客,食客通过服务员
  • UI层:相当服务员,负责食客的点餐上菜,就如同UI层的登录指令
  • 业务逻辑层:相当于主厨,主厨从服务员那获得通知,像助手要原材料(就像找数据库要数据),然后将原材料绘制成成品交给服务员
  • 数据访问层:相当于助手,助手从主厨获得通知,在把材料提交给主厨
    在这里插入图片描述
    在这里插入图片描述
    这样每个层有问题就容易改了。
  • 服务员态度不好~~~~~~换服务员
  • 菜品味道不好~~~~~~~~换厨师
  • 菜品原材料不够新鲜~~~换助手

通过实例讲解三层架构

最简单的登录来说,登录成功每个学生获得10积分。
UI:用户交互的功能,采集信息的反馈结果

            //实例化B层服务类
            Login.BLL.LoginManager mgr = new Login.BLL.LoginManager();
            //定义两个变量来接收
            string Password = txtPassword.Text;
            string userName = txtUserName.Text.Trim();
            int ID = 0;
            string msg = "";
            //把值传入B层
            Login.Model.UserInfo user = new Login.Model.UserInfo();
            user = mgr.UserLogin(ID, userName, Password,out msg);
            MessageBox.Show(msg);

B层

 //实例化D层 
            Login.DAL.UserDAO uDao = new Login.DAL.UserDAO();
           //进入D层,调用D层的SelectuUser方法,之后给user
            Login.Model.UserInfo user= uDao.SelectUser(userName, Password);
            //判断user有无值
            if (user!=null)
            {   //有值实例化D层
                Login.DAL.ScoreDAO sDao = new Login.DAL.ScoreDAO();
                //给D层UpateScore传值
                sDao.UpateScore(user.ID,userName, 10);
                msg = "登录成功";
            }
            else
            {
                msg = "登录失败,没有这个用户或者密码错误";
               
            }
            return user;
        }

D层(UserDAO类):

using (SqlConnection conn = new SqlConnection(DbUtil.connString))
            {   
                SqlCommand cmd = conn.CreateCommand();
                cmd.Parameters.Add(new SqlParameter("@UserName", userName));
                cmd.Parameters.Add(new SqlParameter("@Password", Password));
                //查询数据库
                cmd.CommandText = @"SELECT ID,UserName,Password,Email
                                   FROM USERS WHERE UserName=@UserName AND Password=@Password ";
                cmd.CommandType = CommandType.Text;
                conn.Open();
                SqlDataReader reader = cmd.ExecuteReader();
                Login.Model.UserInfo user = new Login.Model.UserInfo();
                while (reader.Read())
                {
                    if (user==null)
                    {
                    user = new Login.Model.UserInfo();
                    }
                    user.ID = reader.GetInt32(0);
                    user.UserName = reader.GetString(1);
                    user.Password = reader.GetString(2);//not suggestion 
                    if (!reader.IsDBNull(3))
                    {
                        user.Email = reader.GetString(3);
                    }
                }
                return user;
            }

D层(ScoreDAO类):

 using (SqlConnection conn = new SqlConnection(DbUtil.connString))
            {
                SqlCommand cmd = conn.CreateCommand();
                cmd.Parameters.Add(new SqlParameter("@UserName", userName));
                cmd.Parameters.Add(new SqlParameter("@Score", value));
                cmd.Parameters.Add(new SqlParameter(@"ID", ID)); 
                cmd.CommandText = @"insert INTO SCORES(ID,UserName,Score)Values(@ID,@UserName,@Score) ";
                conn.Open();
                cmd.ExecuteNonQuery();
            }

总结

在学编程有三层,人生的境界也有三层,看山是山,看水是水;看山不是山,看水不是水;看山还是山,看水还是水。我们学习的过程,也不过如此。如果满足于看山是山,看水是水的阶段,那么永远就只能是知识的容器;如果停留在看山不是山,看水不是水的阶段,有人能对知识联系联系起来 ,有的会迷茫感觉困难。要想真正运用知识,就必须回归到看山还是山,看水还是水,看山不是山,看水不是水的源头。当达到最高境界时啥七层,编程呀,都不是问题了,看多学多理解多就会了。

评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值