学习完三层之后对于三层有了大概的了解,结束了三层的学习便带着好奇来到了机房重构的学习当中。

在机房重构中第一问题就是要做“登录功能”,这个登录功能用到了七层的架构。

今天我们就来学习什么是七层,七层如何架构:

首先是一个七层架构的包图

首先我们需要明确的了解各个层之间的功能和引用关系

UI层 位于最外层,最接近用户,用于接收用户输入的数据,并且可以显示数据,为用户和计算机提供一种交互操作的界面
Facade层 为子系统中的一组接口提供一个一致的界面,应用了“外观模式”,外观层的作用就是作为U层和B层的枢纽,使得耦合度降低
BLL层 负责对数据的逻辑操作,对数据进行业务逻辑处理
IDAL层 是DAL层的接口
DAL层 数据访问层,主要对数据库或者文本文件,对数据库的操作具体为业务逻辑层或者表示层提供数据服务
Factory层 用于创建接口,返回接口,用到了抽象工厂+反射+配置文件,作用就是灵活的实现数据库的连接
Entity 实现了对数据的封装,数据库中的每个表都对应一个实体类

引用关系: 

UI层

Facade层 Entity层

Facade层 BLL层 Entity层
BLL层 Entity层 Factory层IDAL层
Factory层 IDAL层
IDAL层 Entity层
DAL层 IDAL层Entity层

U层:

namespace UI
{public partial class LoginUI : Form{public LoginUI(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){if (UserName.Text.Trim() == ""){MessageBox.Show("请输入你的用户名!", "提示",MessageBoxButtons.OK, MessageBoxIcon.Warning);}if (PassWord.Text == ""){MessageBox.Show("请输入你的密码!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);}//实例化一个外观Facade.LoginFacade Facade = new Facade.LoginFacade();//实例化一个用户Entity.UserInfo user = new Entity.UserInfo();//接受信息user.UserName = UserName.Text;user.PassWord = PassWord.Text;//调用外观方法,返回给userBoolean flag = false;Facade.LoginFacade FLogin = new Facade.LoginFacade();flag = FLogin.SelectUser(user);bool Flase = false;//判断是否登录成功if (flag != Flase){MessageBox.Show("登录成功");this.Hide();this.DialogResult = System.Windows.Forms.DialogResult.OK;Form a = new Form();a.Show();}else{MessageBox.Show("用户名或密码不正确");}}}
}

1.断文本框中是否有输入的内容

2.实例化一个用户(与Entity产生联系,并把用户名和口令赋值给这个实体)

3.实例化一个外观实例引用一个外观的方法(SelectUser) , 这个方法的返回值是一个逻辑值

有人会问:为什么要在U层中引用Facade层的方法

因为:外观层在七层中的主要作用就是作为U层和B层之间的枢纽,降低他们之间的耦合度。

Facade层

public  class LoginFacade{//判断用户是否存在,并提供返回值flagpublic Boolean SelectUser(Entity.UserInfo user){bool flag;//实例化逻辑类的一个实例BLL.LoginBll userbll = new BLL.LoginBll();flag = userbll.UserBll(user);return flag;}}

因为要有逻辑判断 所以少不了逻辑层,于是在外观层中实例化一个逻辑类

外观层实例化BLL层,调用B层的方法 UserBll, 这个方法返回的是逻辑值。

Entity层:

public class UserInfo{//定义 用户IDprivate int userid;public int UserId{get { return userid; }set { userid = value; }}//定义用户密码private string password;public string PassWord{get { return password; }set { password = value; }}//定义用户类型字段private string level;public string Level{get { return level; }set { level = value; }}//定义用户名字private string username;public string UserName{get { return username; }set { username = value; }}}

BLL层:

 public  class LoginBll{public bool UserBll(Entity.UserInfo user){//实例化工厂Factory.LoginFactory fact = new Factory.LoginFactory();//调用工厂方法创建接口IDAL.LoginIDAL idal = fact.CreateUser();//接受D层的返回值DataTable table = idal.SelectUser(user);bool flag;if (table.Rows.Count == 0)//返回数据表类型,如果行数=0,说明没有符合该账号密码的用户{flag = false;}else{flag = true;}return flag;//返回数值,账号存在}}

因为进行逻辑判断用户是否存在 这个时候就需要有数据库了,需要连接数据库

在B层中实例化工厂层,并且调用工厂层的一个方法来创建连接数据库接口

Factory层:

 public class LoginFactory{//获取配置文件string StrDB = System.Configuration.ConfigurationManager.AppSettings["DB"];//应用反射来获取DAL层操作public IDAL.LoginIDAL CreateUser(){string ClassName = StrDB + "." + "LoginDal";return (IDAL.LoginIDAL)Assembly.Load(StrDB).CreateInstance(ClassName);}}

工厂层:来创建接口,返回接口,用到了抽象工厂+反射+配置文件,

作用是灵活的实现数据库的连接

配置数据库之后 我们需要去D层判断数据

IDAL层:

namespace IDAL
{//接口层public  interface LoginIDAL{//接口函数,判断要登陆的用户名是否在数据表中存在DataTable  SelectUser(UserInfo user);}
}

D层:

访问类LoginDal

 public class LoginDal : IDAL.LoginIDAL {public DataTable  SelectUser(Entity.UserInfo user){SqlHelper sqlHelper = new SqlHelper();SqlParameter[] sqlparams = { new SqlParameter(@"UserName",user.UserName),new SqlParameter(@"PassWord",user.PassWord)};string sql = @"SELECT * FROM user_info WHERE userId=@UserName AND Pwd=@PassWord";//构造语句,匹配数据库表DataTable dt = sqlHelper.ExecuteQuery(sql,sqlparams,CommandType.Text);return dt;}}

操作类:SqlHelper类:

//数据访问层,数据操作类public class SqlHelper{//定义数据库连接操作,指定在数据库上操作的类型private SqlConnection conn = null;private SqlCommand cmd = null;private SqlDataReader sdr = null;//数据库连接public SqlHelper(){string connStr = ConfigurationManager.AppSettings["conStr"];conn = new SqlConnection(connStr);}private SqlConnection GetConn(){if (conn.State == System.Data.ConnectionState.Closed){conn.Open();}return conn;}///<summary>///执行不带参数的数据库操作或者存储过程/// 增删改查操作/// 返回受影响的行数///</summary>public int ExecuteNonQuery(string cmdText, CommandType ct){int res;cmd = new SqlCommand(cmdText, GetConn());cmd.CommandType = ct;res = cmd.ExecuteNonQuery();if (conn.State == System.Data.ConnectionState.Open){conn.Close();}return res;}//执行带参数的数据库操作或者存储过程public int ExecuteNonQuery(string cmdText, SqlParameter[] paras, CommandType ct){int res;using (cmd = new SqlCommand(cmdText, GetConn())){cmd.CommandType = ct;cmd.Parameters.AddRange(paras);res = cmd.ExecuteNonQuery();}return res;}//执行不带参数的SqL查询语句或者存储过程public DataTable ExecuteQuery(string cmdText, CommandType ct){DataTable dt = new DataTable();cmd = new SqlCommand(cmdText,GetConn());cmd.CommandType = ct;using (sdr = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection)){dt.Load(sdr);}return dt;}//执行带参数的SQL查询语句或存储过程public DataTable ExecuteQuery(string cmdText, SqlParameter[] paras, CommandType ct){DataTable dt = new DataTable();cmd = new SqlCommand(cmdText, GetConn());cmd.CommandType = ct;cmd.Parameters.AddRange(paras);using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)){dt.Load(sdr);}return dt;}}

最后我们需要配置文件app. config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration><startup></startup><appSettings><add key="DB" value="DAL"/><add key="conStr" value="server=DESKTOP-MJMH105;Database=CGNetCafe;User ID=sa;Password=123456"/></appSettings>
</configuration>

下面是我对七层整体步骤的一个梳理:

C#七层架构 ----【登录】相关推荐

  1. “七层架构”-----实践篇-登录小实例

    上一篇博客小编简单介绍了一下近期在软件开发过程中由三层架构演变而来的"七层架构"基本理论点.理论知识与产生结果之间还夹杂着一个重要的点---实践.用实践来检验理论知识,丰富知识内涵 ...

  2. 个人机房重构--七层实现登录

    一.概述: 现在准备开始个人机房重构,那么就从简单的来,先用七层实现登录.我们常说的七层是指哪七层呢?其实七层就是在三层的基础上,添加了外观层--设计模式的外观模式,抽象工厂加反射,接口层.外观层主要 ...

  3. “七层架构”---理论篇

    前段时间在做项目的过程中运用到了三层架构.最近在做项目过程中,又将三层架构进行扩充至七层.下面小编为您分享这延伸出来的"七层". "七层"包括哪些层? &quo ...

  4. 开放式系统互联模型(网络的七层架构)

    文章目录 前言 开放式系统互联模型(网络的七层架构) 1.物理层 2.数据链路层: 3.网络层: 4.传输层: 5.会话层: 6.表示层: 7.应用层 : 前言   如果您觉得有用的话,记得给博主点个 ...

  5. 一句口诀记忆计算机网络七层架构模型和TCP/IP五层模型(记不住你打我)

    文章目录 前言 一. 1.1 OSI七层网络模型(口诀:物联网叔会使用) 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层 二. TCP/IP 五层模型(记忆口诀:物联网,叔应用) 物理层 ...

  6. C# 三层架构与七层架构

    前言 学习三层的时候对于这三层有了大致的了解,但是还是说不出个一二,今天试着总结一下,将自己的知识重新梳理一遍. 三层架构 概念 三层架构通常意义上讲的就是将整个业务应用划分为:表现层(UI).业务逻 ...

  7. 浅谈计算机网络七层架构

    计算机网络结构 国际标准化组织ISO 于1981年正式推荐了一个网络系统结构--七层参考模型,叫做开放系统互连模型(Open System Interconnection,OSI).由于这个标准模型的 ...

  8. 【C#实践】详解三层转七层:登录

    背景 一开始借用别人的代码,敲完也是很多地方看不懂!不知道从什么地方下手!不懂三层到七层到底是怎么映射过去的! 后来就是多查,慢慢有大体的轮廓,逐个部分解决! 过程: 1.看整体,对于不懂的部分,先查 ...

  9. asp.net七层架构是指什么

    三层 Domain(实体层),Dao( 数据访问层 ),Srv( 业务逻辑层 ) 面向接口编程 (5层) Doamin(实体层),IDao( 数据访问层 接口),Dao( 数据访问层 ),ISrv( ...

最新文章

  1. hadoop周边 框架体系
  2. c2064 项不会计算为接受0个参数的函数_无网格法理论与Matlab程序设计(6)——传统径向基点插值(RPIM)形函数...
  3. 实例化Spring Bean:Bean实例化的姿势有多少种?
  4. Gradient Boosted Decision Trees详解
  5. Linux中Buffer和Cache的区别
  6. 渐进式web应用程序_渐进式Web应用程序与加速的移动页面:有什么区别,哪种最适合您?
  7. 计算机双一流a水平大学,教育部公布:全国双一流A类名单出炉,36所大学上榜,你的大学在内吗...
  8. propertysource注解_Java开发必须掌握的 20+ 种 Spring 常用注解
  9. threejs获取模型坐标_Threejs倒影实现解析
  10. svn基本常见操作设置
  11. System.Convert 的一些事
  12. vue-count-to插件使用方法
  13. Ossim系统常见测试方法
  14. vissim免修改时间工具_视频剪辑工具premiere最基础使用教程
  15. ndows 内存诊断工具,Windows10自带内存检测工具的使用方法
  16. Selenium自动化测试:如何使用cookie跳过验证码登录
  17. Spring 之 @Cacheable 源码解析(下)
  18. fflush函数有什么作用?
  19. 关于 uintptr_t和intptr_t 类型
  20. efk集中管理npgstack集群日志

热门文章

  1. 《Effective C++ 3th》——后记
  2. 《班扎古鲁白玛的沉默》
  3. 怎样使一排文字中间有间隔_Word如何调整字间距,行间距
  4. QMediaPlayer 打包解码器注意事项
  5. 关于android9 的适配遇到的坑
  6. 基于ssm框架—微信小程序开发的会议管理系统
  7. 互联网晚报 | 11月14日 星期日 | 好未来宣布关闭K9学科类业务;京东工业品推出“智能移动仓”;北交所11月15日正式开市...
  8. 用心去写的neo4j教程01-概述
  9. Android项目——智能农业
  10. 哔哩下载姬 - DownKyi