分层应用——怎样实现登录?
三层这个阶段的学习主要是靠自学,但从网上找到的相关资料、博客都是零散的,没有体系。资料看了不少,但一直没有一个大概的轮廓。查到的资料都是理论性的,那如何在详细的样例中实现分层呢?导图之后就是详细的小样例。
以初识三层中登录的小样例为例,来看看分层的详细应用吧。
主要步骤:用户在登录界面输入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
分层应用——怎样实现登录?相关推荐
- 如何规范公司所有应用分层?
聊聊架构.2017-10-18 作者|张辉清 编辑|雨多田光 一.写在前面 应用分层这件事情看起来很简单,但每个程序员都有自己的一套,哪怕是初学者.如何让一家公司的几百个应用采用统一的分层结构,并得到 ...
- 中小型研发团队架构实践三要点--转
来自微信公众号聊聊架构 作者|张辉清 编辑|雨多田光 如果你正好处在中小型研发团队-- 中小型研发团队很多,而社区在中小型研发团队架构实践方面的探讨却很少.中小型研发团队特别是 50 至 200 人的 ...
- 中小型研发团队架构实践三要点(转自原携程架构师张辉清)
如果你正好处在中小型研发团队-- 中小型研发团队很多,而社区在中小型研发团队架构实践方面的探讨却很少.中小型研发团队特别是 50 至 200 人的研发团队,在早期的业务探索阶段,更多关注业务逻辑,快速 ...
- 性能测试——接口、协议篇
1.不同视角的接口 开发眼中的接口:模块与模块之间对接的方式 测试眼中的接口:协议接口,可以独立部署 服务的成的 2.常见的接口协议 HTTP 超文本传输协议 HTTPS 安全超文本协议 FTP 文件 ...
- 中小型研发团队架构落地实践18篇,含案例、代码
1 写在前面 中小型研发团队很多,而社区在中小型研发团队架构实践方面的探讨却很少.中小型研发团队特别是 50 至 200 人的研发团队,在早期的业务探索阶段,更多关注业务逻辑,快速迭代以验证商业模式, ...
- 中小型研发团队架构实践三要点
如果你正好处在中小型研发团队-- 中小型研发团队很多,而社区在中小型研发团队架构实践方面的探讨却很少.中小型研发团队特别是 50 至 200 人的研发团队,在早期的业务探索阶段,更多关注业务逻辑,快速 ...
- .net 中小型研发团队架构实践三要点
中小型研发团队很多,而社区在中小型研发团队架构实践方面的探讨却很少.中小型研发团队特别是 50 至 200 人的研发团队,在早期的业务探索阶段,更多关注业务逻辑,快速迭代以验证商业模式,很少去关注技术 ...
- 【软件测试】日志第五天
系软件开发日志 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:软件测试 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系软件开发日志 前言web ...
- java视频超清,JavaWeb合集第二阶段(后端篇)学习视频-超清4k画质
001-Servlet-学习内容介绍 002-IDEA-IDEA的下载与安装 003-IDEA-IDEA创建Java项目 004-IDEA-IDEA的基本设置 005-HTTP-浏览器和服务器的交互流 ...
最新文章
- Linq专题之提高编码效率—— 第一篇 Aggregate方法
- How to Get Name of Months in ABAP/4
- python 问题自动匹配解决方案_匹配字典集。最优雅的解决方案。Python
- oracle清理asm归档日志,【Oracle】 rman 删除归档日志的命令
- 互联网技术(java框架、分布式、集群)干货视频大全,不看后悔!(免费下载)
- 怎么写linux的sh文件,linux – 什么是.sh文件?
- 化工行业借力APS生产排程
- 人人视频android资源比ios多,人人视频
- c++语言设计五子棋游戏,C++实现五子棋游戏
- Python queue
- 哈佛商业评论:什么是颠覆性创新?
- bugku秋名山车神
- SpringBoot 接口层统一加密解密
- 火箭季后赛第二轮火箭vs湖人比赛赛程
- 使用eclipse和JavaFX Scene Builder进行快速构建JavaFX应用程序
- 好的书籍乃进步的阶梯也
- PLC FFT变换 快速傅里叶变换 (含博途PLC完整SCL代码)
- select2下拉搜索框匹配汉字全拼及首字母
- 设置Mybatis(3.2.8)实体嵌套关系(一对多,多对多)遇到的问题及经验总结记录
- 室内地图编辑器,什么软件可以编辑地图
热门文章
- python需要音语基础_英语基础一般,如何才能学习C语言编程和Python
- python拍7游戏代码_Python基础语法-7(小游戏)
- vsftp匿名访问目录_vsftp 匿名访问设置设置
- python求10的所有因数_python怎么求因数
- php log pecl,PHP日志扩展SeasLog-1.0.0正式版在PECL发布
- kodi教程_KODI清理缓存插件安装设置教程
- python 用户认证_python基于mysql的用户认证
- java lambda表达式_恕我直言你可能真的不会java第1篇:lambda表达式会用了么?
- python为什么那么难学_Python入门很难吗? 为什么越来越多的人都学Python?
- 如何使用Android studio创建签名