三层总结

三层敲完了,感觉只是大概的知道,对知识了解并不深入,还是有些混乱,停下来总结是理清思路最好的办法~

一、学习视频前我对三层的理解

很久以前就听大师父问过师父三层的问题,自己心里就觉得三层还应该很简单吧,如果把我们敲的机房收费系统分三层的话,那应该就是界面层是一层,代码层是一层,数据库是一层。


二、学习视频后我对三层的理解

学习视频后我就知道自己是华丽丽的错了,三层是把我们写得代码分了层,只不过是有一层的代码是专管界面的,有一层是专门控制逻辑思路的代码,还有一层只管与数据库连接的代码。那么它们到底是怎么分层?又该如何实现呢,下面详细介绍:

⒈What:三层按逻辑上划分:UI/BLL+DAL/DB      按物理划分:显示层/业务层/数据层     我们通常说的三层就是:显示层View/UI、业务逻辑层BLL(Business Logic Layer)、数据访问层DAL(Data Access Layer)三层之间的关系图如下:

  

对图的说明以及各个层的作用:

数据访问层DAL(Data Access Layer)(其实就是对数据库进行的增、删、改、查的操作)

从数据源加载数据(Select)             

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

从数据源删除数据(Delete)

②显示层View/UI(主要的对界面上显示的显示的内容进行操作)

      向用户展现特定业务数据

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

 业务逻辑层BLL(Business Logic Layer)(各种函数方法,起连接作用)

从DAL中获取数据,以供UI显示用

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

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


⒉Why

使用三层的目的,主要是为了将控制不同层的代码隔离开,解耦。这样就可以增加软件的性能、安全性、可维护性和拓展性。


⒊How

各个层之间的引用关系:

UI -> BLL -> DAL
DAL所在程序集不引用BLL和UI
BLL需要引用DAL
UI直接引用BLL,可能会间接引用DAL


举个例子:(登录三层)

创建过程:VS新建窗体应用程序(新建UI层)—>在UI层工程中,点击文件—>添加新建项目,添加其他层,如用C#创建后的结果如下:

                         

①LoginModel层(有时也会起名叫LoginEntity在下面就称为实体层),我感觉这一层就是将数据库中的内容,用代码的形式表示到我们的工程中,而且我们一定要注意的是,一定在这一层中的属性名一定要与表中的字段名一致。如图我们先建如下图:我们先新建数据库Login,然后在数据库中新建张表Users(字段为UserName、PWD):

 

那么我们在LoginModel层的代码一定要与之对应

namespace Login.Model
{
    public class UserInfo
    {
        public string UserName { get; set; }
        public string PWD { get; set; }
    }
}

②UI层,引用BLL层和Model层,获取文本框中的用户名和密码,调用B层的方法,将B层中返回的参数的值赋值给实体层。

namespace LoginUI
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //登录按钮点击事件
        private void btnLogin_Click(object sender, EventArgs e)
        {
            string userName = txtUserName.Text.Trim();
            string password = txtPassword.Text.Trim();
            Login.BLL.LoginManage mgr = new Login.BLL.LoginManage();
            Login .Model .UserInfo user = mgr.UserLogin(userName, password);

            MessageBox.Show("登录用户"+user .UserName );


        }
    }
}

③BLL层,引用D层和Model层,调用D层的方法,将返回的参数值赋值给实体层

 namespace Login.BLL
{
    public class LoginManage
    {
        public Login .Model.UserInfo UserLogin(string UserName, string password)
        {
            //throw new NotImplementedException();

            Login.DAL.UserDAL uDao = new Login.DAL.UserDAL();
            Login.Model .UserInfo user=uDao.SelectUser(UserName, password);

            if (user != null)//login succefully
            {
                Login.DAL.ScoreDAL sDao = new Login.DAL.ScoreDAL();
                sDao.UpdateScore(UserName, 10);
                return user;
            }
            else
            {
                throw new Exception("登录失败。");
            }
        }

    }
}

④DAL层:引用实体层,主要是进行数据库的连接,将查询到的记录赋值给实体层。

namespace Login.DAL
{
    public class UserDAL
    {
        public static string ConnecString = "Server=.;Database = Login;User ID=sa;Password =123";
        public Login.Model.UserInfo SelectUser(string userName, string password)
        {
            //throw new NotImplementedException();
            using (SqlConnection conn = new SqlConnection(ConnecString))
            {
                SqlCommand cmd = conn.CreateCommand();
               
                cmd.CommandText = @"SELECT * FROM Users WHERE UserName=@userName AND PWD =@password";
                cmd.CommandType = CommandType.Text;
                cmd .Parameters .Add (new SqlParameter ("@UserName",userName ));
                cmd.Parameters.Add(new SqlParameter("@password", password ));

                conn.Open();
                SqlDataReader reader = cmd.ExecuteReader();

                Login.Model.UserInfo user = null ; 
                while (reader.Read())
                {
                    if (user == null)
                    {
                        user = new Login.Model.UserInfo();
                    }
                        user.UserName = reader.GetString(1);
                        user.PWD  = reader.GetString(1);//not suggestion
                   
                }
                return user;    
            }
        }
    }
}


我的体会:三层更有利于分工合作。就像一个饭店分为前台迎宾,传菜,和做菜的厨师。就像流水线一样,可以提高效率。U层和D层就像是两岸,而B层是座桥,将它们连接起来。我们加入自己思考和方法的是B层,一般U层和D层都是一些模式化的代码,但感觉连接数据库时好像总是更容易出错,可能是因为用得还不够多吧,对于其中有些代码的理解还不够成熟,还要多多理解,使对代码的运用更加纯熟。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 71
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 71
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值