三层这个阶段的学习主要是靠自学,但从网上找到的相关资料、博客都是零散的,没有体系。资料看了不少,但一直没有一个大概的轮廓。查到的资料都是理论性的,那如何在详细的样例中实现分层呢?导图之后就是详细的小样例。

以初识三层中登录的小样例为例,来看看分层的详细应用吧。

主要步骤:用户在登录界面输入username和password,并进行登录。若登录成功,弹出登录成功提示框,并添加�对应的积分。若不成功,抛出登录失败。

1、U层:表现层,用户输入数据和指令,并终于显示出信息。

界面

namespace LoginUI
{public partial class Form1 : Form{public Form1(){InitializeComponent();}//输入username与password,单击登录按钮private void button1_Click(object sender, EventArgs e){string userName = textBox1.Text.Trim();string password = textBox2.Text;Login.BLL.LoginManager mgr = new Login.BLL.LoginManager();Login.Model01.UserInfo user = mgr.UserLogin(userName, password);  //实例化对象MessageBox.Show("登录用户:" + user.UserName);}}
}

2、B层:业务逻辑层,处理与业务相关的逻辑,把从U层传来的username和password经过处理,传到D层作对应的数据处理。

namespace Login.BLL
{//推断用户是否存在,若存在,登录成功并添加�积分;若不存在,抛出异常。public class LoginManager{public Login.Model01.UserInfo UserLogin(string userName, string password){Login.DAL.UserDAO uDao = new Login.DAL .UserDAO();Login.Model01 .UserInfo user = uDao.SelectUser(userName, password); //传入username与passwordif (user != null)// login successfully.{Login.DAL.ScoreDAO sDao = new Login.DAL.ScoreDAO();sDao.UpdateScore(userName, 10);return user;}else{throw new Exception("登录失败。");    //异常处理}}}
}

3、D层:数据訪问层,运行与数据源相关的操作。在这里,包含DbUtil, ScoreDAO,UserDAO。

DbUtil负责打开数据库,訪问数据库。

namespace Login.DAL
{class DbUtil{public static string ConnString = @"Server=yang; Database=Login; User ID=sa; Password=123456";//yang为server地址,Login是数据库名称}
}

UserDAO用来推断该username是否存在,password是否正确。

namespace Login.DAL
{public class UserDAO{public Login.Model01.UserInfo SelectUser(string userName, string password)    //username与password通过B层传到D层,在D层实现查找{using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))        //建立一个sql连接,using可实现自己主动关闭。{SqlCommand cmd = conn.CreateCommand();cmd.CommandText = @"SELECT ID, UserName, Password,Email FROM USERS WHERE UserName=@UserName AND Password=@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.Model01.UserInfo user = null;  //推断记录是否存在while (reader.Read()){if (user == null){user = new Login.Model01.UserInfo();}user.ID = reader.GetInt32(0);    //字符转义user.UserName = reader.GetString(1);user.Password = reader.GetString(2);// not suggestionif (!reader.IsDBNull(3)){user.Email = reader.GetString(3);}}return user;}}}
}

ScoreDAO负责当用户登录成功后,更新数据库中的积分。

namespace Login.DAL
{public class ScoreDAO{//登录成功后,自己主动添加�积分public void UpdateScore(string userName, int value){using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))      //建立数据库连接{SqlCommand cmd = conn.CreateCommand();cmd.CommandText = @"INSERT INTO SCORES(UserName, Score) Values(@UserName,@Score)";cmd.Parameters.Add(new SqlParameter("@UserName", userName));      //Parameters加入�记录cmd.Parameters.Add(new SqlParameter("@Score", value));conn.Open();cmd.ExecuteNonQuery();}}}
}

4、实体类

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; }}
}

这样,各层分工明白,职责清晰。既有利于合作开发,也大大减少了维护的成本和维护的时间。与我们第一次机房收费系统的登录界面相比,分层之后的登录界面就显得效果好多了。可是分层不是分的越多越好,过多的分层限制了开发者与客户对系统的理解能力,限制了客户与开发者的交流。分层越多的话,可靠性有时也是不稳定; 项目开发中实在是要详细分析,盲目套用耦合不降反升,效率不高反低,维护不便反繁。

分层不是目的,是软件发展的产物和毕竟之路。层化是把软件横向切了几刀,模块化是把软件纵向切了几刀。我们要灵活使用分层,更好的为我们服务。

转载于:https://www.cnblogs.com/yxwkf/p/3911188.html

分层应用——怎样实现登录?相关推荐

  1. 如何规范公司所有应用分层?

    聊聊架构.2017-10-18 作者|张辉清 编辑|雨多田光 一.写在前面 应用分层这件事情看起来很简单,但每个程序员都有自己的一套,哪怕是初学者.如何让一家公司的几百个应用采用统一的分层结构,并得到 ...

  2. 中小型研发团队架构实践三要点--转

    来自微信公众号聊聊架构 作者|张辉清 编辑|雨多田光 如果你正好处在中小型研发团队-- 中小型研发团队很多,而社区在中小型研发团队架构实践方面的探讨却很少.中小型研发团队特别是 50 至 200 人的 ...

  3. 中小型研发团队架构实践三要点(转自原携程架构师张辉清)

    如果你正好处在中小型研发团队-- 中小型研发团队很多,而社区在中小型研发团队架构实践方面的探讨却很少.中小型研发团队特别是 50 至 200 人的研发团队,在早期的业务探索阶段,更多关注业务逻辑,快速 ...

  4. 性能测试——接口、协议篇

    1.不同视角的接口 开发眼中的接口:模块与模块之间对接的方式 测试眼中的接口:协议接口,可以独立部署 服务的成的 2.常见的接口协议 HTTP 超文本传输协议 HTTPS 安全超文本协议 FTP 文件 ...

  5. 中小型研发团队架构落地实践18篇,含案例、代码

    1 写在前面 中小型研发团队很多,而社区在中小型研发团队架构实践方面的探讨却很少.中小型研发团队特别是 50 至 200 人的研发团队,在早期的业务探索阶段,更多关注业务逻辑,快速迭代以验证商业模式, ...

  6. 中小型研发团队架构实践三要点

    如果你正好处在中小型研发团队-- 中小型研发团队很多,而社区在中小型研发团队架构实践方面的探讨却很少.中小型研发团队特别是 50 至 200 人的研发团队,在早期的业务探索阶段,更多关注业务逻辑,快速 ...

  7. .net 中小型研发团队架构实践三要点

    中小型研发团队很多,而社区在中小型研发团队架构实践方面的探讨却很少.中小型研发团队特别是 50 至 200 人的研发团队,在早期的业务探索阶段,更多关注业务逻辑,快速迭代以验证商业模式,很少去关注技术 ...

  8. 【软件测试】日志第五天

    系软件开发日志 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:软件测试 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系软件开发日志 前言web ...

  9. java视频超清,JavaWeb合集第二阶段(后端篇)学习视频-超清4k画质

    001-Servlet-学习内容介绍 002-IDEA-IDEA的下载与安装 003-IDEA-IDEA创建Java项目 004-IDEA-IDEA的基本设置 005-HTTP-浏览器和服务器的交互流 ...

最新文章

  1. Linq专题之提高编码效率—— 第一篇 Aggregate方法
  2. How to Get Name of Months in ABAP/4
  3. python 问题自动匹配解决方案_匹配字典集。最优雅的解决方案。Python
  4. oracle清理asm归档日志,【Oracle】 rman 删除归档日志的命令
  5. 互联网技术(java框架、分布式、集群)干货视频大全,不看后悔!(免费下载)
  6. 怎么写linux的sh文件,linux – 什么是.sh文件?
  7. 化工行业借力APS生产排程
  8. 人人视频android资源比ios多,人人视频
  9. c++语言设计五子棋游戏,C++实现五子棋游戏
  10. Python queue
  11. 哈佛商业评论:什么是颠覆性创新?
  12. bugku秋名山车神
  13. SpringBoot 接口层统一加密解密
  14. 火箭季后赛第二轮火箭vs湖人比赛赛程
  15. 使用eclipse和JavaFX Scene Builder进行快速构建JavaFX应用程序
  16. 好的书籍乃进步的阶梯也
  17. PLC FFT变换 快速傅里叶变换 (含博途PLC完整SCL代码)
  18. select2下拉搜索框匹配汉字全拼及首字母
  19. 设置Mybatis(3.2.8)实体嵌套关系(一对多,多对多)遇到的问题及经验总结记录
  20. 室内地图编辑器,什么软件可以编辑地图

热门文章

  1. python需要音语基础_英语基础一般,如何才能学习C语言编程和Python
  2. python拍7游戏代码_Python基础语法-7(小游戏)
  3. vsftp匿名访问目录_vsftp 匿名访问设置设置
  4. python求10的所有因数_python怎么求因数
  5. php log pecl,PHP日志扩展SeasLog-1.0.0正式版在PECL发布
  6. kodi教程_KODI清理缓存插件安装设置教程
  7. python 用户认证_python基于mysql的用户认证
  8. java lambda表达式_恕我直言你可能真的不会java第1篇:lambda表达式会用了么?
  9. python为什么那么难学_Python入门很难吗? 为什么越来越多的人都学Python?
  10. 如何使用Android studio创建签名