欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

三层架构

程序员文章站 2022-03-14 10:13:17
...

三层架构

三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。区分层次的目的即为了”高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。

使用目的

三层体系的应用程序将业务规则、数据访问、合法性校验等工作放到了中间层进行处理。通常情况下,客户端不直接与数据库进行交互,而是通过COM/DCOM通讯与中间层建立连接,再经由中间层与数据库进行交互。这样也就导致了我们实际过程中可以分开开发三层(每一层功能相互独立)

各层说明

UI层

UI层作为用户直接面对的层,也可以叫做交互层(我起的名字),在UI层我们面对的是控件信息,布局信息,以及如果用户输入一些内容,我们呢可以get 这些内容,所以,UI层的用作分为一下俩方面
功能
采集用户数据
采集用户操作,将特定界面展现给用户
设计要求
满足要求,界面简单
展示方式
1 winform
2网页

业务逻辑层

业务逻辑层,是一个软件真正的灵魂,它以代码的形式展现如何实现数据的操作,对UI层用户的操作有相应的反应

(这里我有一个想法,业务逻辑必然要用到方法来封装,那么如果将不同的方法封装成类,就可以更加明确的进行不同逻辑的分割)

数据访问层

数据访问层实现了与数据库或是其他存储介质的直接交互,这个层,只需要对数据库进行数据查询,数据插入,以及数据修改,不需要具体修改成什么样,只需要以参数的形式,以方法来封装,实现其功能.

总结

三层结构,功能彼此独立,通常情况下,三层调用如下
UI=>BLL=>DAL
UI层事件用到BLL中的相应逻辑,如果需要数据的操作,那么有BLL进行对DAl的调用.如此,便实现了UI不直接调用数据访问层,这样就会使得能够独立开发各个模块.

以登陆窗体为例

创建窗体.
三层架构
在其cmdLogin_Click 事件中我们只需要定义逻辑类,并调用登陆的方法即可
如下
string userName = txtUsername.Text;//定义俩个变量名
string passWord = txtPassword.Text;
Login.BLL.LoginService mgr = new Login.BLL.LoginService();
LoginModel .UserInfo user = mgr.userLogin(userName ,passWord );
//嗲用业务逻辑方法
MessageBox.Show("用户名:"+userName );

在业务逻辑当中,我们 调用数据访问层的方法,其次就是判断登陆成功这么样,
不成功有这么样


            DAL.UserDAO uDao = new DAL.UserDAO();
            LoginModel .UserInfo  user= uDao.SelectUser(userName ,password );
            if (user != null)
            {
                Login.DAL.ScoreDAO sDao = new Login.DAL.ScoreDAO();
                sDao.UpdateScore(userName, 10);
                return user;
            }
            else
            {
                throw new Exception("登陆失败");
            }

而在数据交互层,我们是对数据库的访问问题

using (SqlConnection conn = new SqlConnection(DBUtil.ConnString))
            {
                conn.Open();
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandText = @"SELECT ID,UserName,PassWord,Email
                FROM USERS WHERE UserName = @UserName AND aaa@qq.com";
                //sql 文本
                //这里叫做声明变量,也就是上边cmd 语句中用到的变量.
                cmd.Parameters.Add(new SqlParameter("@UserName", userName));
                cmd.Parameters.Add(new SqlParameter("@PassWord",passWord )); 
                SqlDataReader reader = cmd.ExecuteReader();//提供只读,单向的数据传输
                LoginModel.UserInfo user = null;//构造业务数据模型

                while (reader.Read ())//读完全部记录
                {
                    if (user ==null )
                    {
                        user = new LoginModel.UserInfo();
                    }
                    user.ID1 = reader.GetInt32(0);
                    user.UserName1 = reader.GetString(1);
                    user.Password1 = reader.GetString(2);
                    if (!reader.IsDBNull (3))
                    {
                        user.Email1 = reader.GetString(3);                      
                    }
                }
                return user;
            }

这样就实现了UI层数据与数据库的数据匹配问题

自我总结

我觉得三层框架,就像是解绳子问题,如果想要构建一个很长的绳子,我们需要将几个很短的绳子接起来,每一小节绳子不需要考虑整个大绳子的作用,一个如何构建大绳子,只是需要考虑好自己的作用以及如何和下一节绳子能够接起来的问题
**>滴水穿石,每一滴都意义非凡
冰冻三尺,每一度都有价值**