前言:

在学习UML的时候,为了更加深刻的理解类图和包图,就提前学习了一些“三层”的知识,当时还没有面向对象的语言基础,只是大概的知道而已,并没有深入的去研究。

现在经过了C#,设计模式,VB.NET的学习,与“面向对象”进行了多次碰撞,这次就是用C#语言做了一个运用三层的小Demo,下面就详细的介绍一下三层的“3W1H”。

一、what

首先我们先来看第一个“W”,什么是三层架构?

    如图所示,最常见的三层架构组成就是表示层、业务逻辑层、数据访问层。
    1、表示层UI:展示数据,采集用户输入的信息和操作。
    2、业务逻辑层BLL:桥梁,数据处理,传递。
    3、数据访问层DAL:与数据源打交道,实现与数据库的交互和访问。
    总体上看,分层的原则就是各司其职,实现数据的操作与显示的分离,体现高内聚,低耦合的原则。

二、why

       说到为什么使用三层架构??一个必要前提就是分析一下这个东西的利弊,我们使用一个东西之前,一定是进行了权衡利弊的。
       
       优点:
       1、复用
       2、解耦
       3、易维护
       缺点:
       1、降低性能
       2、级联修改
       3、增加成本
       简而言之,分析了三层的利弊,使用三层的目的是各类别职责单一,使用方便。这让我想起了设计模式中的单一职责的原则,差不多大同小异吧。

三、where

      学习了为什么使用三层,下一步就要讨论一下在什么情况下使用三层??
     不用:
     1、逻辑简单
     2、没有数据存储需求
    
     用:
     1、逻辑复杂
     2、数据存储成库
    
     总之,人尽其才,物尽其用。画蛇添足,往往是无用功的。软件开发也是一样,做小项目的时候,分不分层确实看不出什么差别,并显得啰嗦。但当项目变复杂时,分层就显出它的优势了,所以使用三层,视情况而定。

四、how

       那么如何使用三层架构呢?下面就通过一个使用了三层的系统登陆的demo,让大家了解一下三层中的“HOW”。
     
     在看代码前,我们先要搞清楚两件事情:
     1、三层的依赖关系。如下图
     
    2、三层间的数据传递。如下图
代码如下:
1、DAL层的UserDAO类,用于User表的操作。ScoreDAO类略
namespace Login.DAL
{public class UserDAO{public Login.Model.UserInfo SelectUser(string userName,string password){using(SqlConnection conn=new SqlConnection (DbUtil.Connntring )){SqlCommand cmd = conn.CreateCommand();cmd.CommandText = @"SELECT ID,UserName,PWD,EmailFROM 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.ID = reader.GetInt32(0);user.UserName = reader.GetString(1);user.PassWord = reader.GetString(2);if (!reader.IsDBNull (3)){user.Email = reader.GetString(3);   }          }return user;}}}
}

2、DAL层的DbUtil类,用于连接数据源的。

namespace Login.DAL
{public class DbUtil{public static string Connntring = @"Server=AZZ-PC;Database=AZZ_Charge;User ID=sa;Password=123456";}
}

3、BLL层的LoginManager类。

namespace Login.BLL
{public class LoginManager{public Login.Model.UserInfo UserLogin(string userName,string password){Login.DAL.UserDAO uDao = new Login.DAL.UserDAO();Login.Model.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 ("登陆失败。");}}}
}

4、Model实体中的UserInfo类,用于封装数据,使数据可以在三层之中调用,本身不知道被谁调用了。

namespace Login.Model
{public class UserInfo{public int ID { get; set; }public string UserName { get; set; }public string PassWord { get; set; }public string Email { get; set; }}
}

5、UI层,收集用户输入的信息,并做简单的判断。

namespace LoginUI
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void btnLogin_Click(object sender, EventArgs e){//IDbConnection conn = new SqlConnection("c......");//IDbCommand cmd = conn.CreateCommand();//cmd.CommandText = "Select UserName Form USERS WHERE";//cmd.ExecuteReader();string userName = txtUsername.Text.Trim();string password = txtPassword.Text;Login.BLL.LoginManager mgr = new Login.BLL.LoginManager();Login.Model.UserInfo user = mgr.UserLogin(userName, password);MessageBox.Show("登陆用户:" + user.UserName);}}
}

五、小结

    首先,学习三层架构更多体会到了i+1有效输入的作用,当初在UML初次接触了三层,没有碰触什么火花,但是也留下了一下印象,让我这次再接触三层的时候,有了熟悉的感觉。再来,就是3W1H的学习方法,让我们直观的认识了一个新事物,从陌生到熟悉。最后,对于三层的学习只是初了解,有什么理解不对的地方,请多多指教。

“3W1H法”浅析三层架构相关推荐

  1. 浅析三层架构与MVC模式的区别

    浅析三层架构与MVC模式的区别 三层架构介绍: (点击链接即可见三层架构) MVC模式介绍: MVC全名是Model ViewController,是模型(model)-视图(view)-控制器(co ...

  2. 三层架构与设计模式思想部署企业级数据库业务系统开发

    1. 三层架构介绍 1.1关于架构 架构这个词从它的出现后,就有许许多多的程序员.架构师们激烈地讨论着它的发展,但是架构一词的出现,却是随着三层架构的出现才出现的.当然,目前应用三层架构开发也正是业界 ...

  3. 【软件架构】三层架构

    三层架构 三层架构简介 三层架构的必要性 经典两层架构 三层架构 三层架构逐层浅析 表示层 业务逻辑层 数据访问层 三层架构层间关系 层间依赖关系 层间数据流向 三层架构与实体类 需要实体类的理由 实 ...

  4. 【JavaWeb】之MVC三层架构

    [JavaWeb]MVC三层架构 前言 一.JavaBean 1.JavaBean的概念 2.JavaBean的特征 3.JSP访问JavaBean的语法 二.MVC三层架构 1.MVC简介 2.Mo ...

  5. MyBatis-架构概述,什么是框架,三层架构,JDBC

    MyBatis 框架-第1章 框架概述 1. 软件开发常用结构 1.1 三层架构 三层架构包含的三层: 界面层(User Interface layer).业务逻辑层(Business Logic L ...

  6. java从入门到精通二十四(三层架构完成增删改查)

    java从入门到精通二十四(三层架构完成增删改查) 前言 环境准备 创建web项目结构 导入依赖和配置文件 创建层次模型 实现查询 实现添加 实现修改 完成删除 做一个用户登录验证 会话技术 cook ...

  7. 黑马程序员-三层架构介绍

    ---------------------- Windows Phone 7手机开发. .Net培训.期待与您交流! ---------------------- 三层架构介绍 1关于架构 架构这个词 ...

  8. 从三层架构说起,谈谈对历史项目的小改造

    项目背景说明 最近接手一个 "老" 项目的需求修改,项目整体基于 .net core 3.1 平台,以传统的三层架构为基础构建.了解需求后,逐步对原有项目框架进行大概的了解,主要是 ...

  9. JavaWeb小项目(二)- 完成品牌数据的增删改查(JSP/MVC/三层架构综合应用)

    JavaWeb小项目(二)- 完成品牌数据的增删改查(JSP/MVC/三层架构综合应用) 文章目录 JavaWeb小项目(二)- 完成品牌数据的增删改查(JSP/MVC/三层架构综合应用) 环境搭建 ...

  10. 一个简单实用的,基于EF的三层架构

    到底什么样的框架才是好框架呢?或许不同人有不同的看法.我个人觉一个好的框架,最重要的要是简单实用,能快速适开发,可维护性高(不会出现复制黏贴的代码),并能快速响应各种业务场景的变化的框架,同时性能不会 ...

最新文章

  1. URAL - 1902 Neo-Venice
  2. ROS系统——部署OpenVINO版Nanodet超轻量目标检测器
  3. 为什么python不报错不出结果_python的坑货ConfigParser类读取文件失败不报错
  4. Day3--js--可恶之变量声明提升大法.。。
  5. boost::sort模块实现spreadsort 浮点排序示例
  6. 进程、线程和协程的区别和联系(TX)
  7. 浅谈基于Linux的Redis环境搭建
  8. 中国自古以来经历了三种官员选拔制度
  9. Redis系列四、redis的五种数据结构和相关指令之List
  10. 中国数据库OceanBase登顶之路
  11. php将图片导入,php中图片文件的导入,上传与下载
  12. 飞机订票系统的html模板,飞机订票系统程序设计
  13. python3 compile_python3.2的pycompile
  14. atmega8a如何烧写程序_快捷又安全!如何利用芯片内部Bootloader烧写程序?
  15. 安全漏洞问题6:SQL注入
  16. NYOJ题目37-回文字符串
  17. VC之fseek函数、ftell函数和rewind函数
  18. 普中开发板白屏_普中开发板送的12864为什么程序写进去,屏幕不显示?
  19. 基于java客户关系管理系统
  20. linux压缩一个tar.xz文件,Linux下解压tar.xz格式压缩文件

热门文章

  1. ROC曲线下面积为什么越大越好 (TPR FPR)
  2. 彻底清除mplay.com与mplay.exe病毒
  3. 微软苏州校招笔试题目(1月10日)Colorful Lecture Note的解法
  4. SAP ABAP搜狗输入法注释删除注释快捷键设置(未解决)
  5. 游戏对战平台研究终结篇
  6. zk+kafka集群
  7. 胡铸韬担任BCF理事
  8. java 字符串排列组合_java实现字符串排列组合问题
  9. c语言编写排列组合程序,C语言实现排列组合
  10. 什么是阿里云服务器ECS?