【三层架构】登陆实例
2016-05-05 11:55
351 查看
前言
对于登陆实例,我们可以将它看一个业务,即登陆业务。UI层负责界面设计显示和采集用户的操作。BL层通过获取UI传来的操作指令,对数据业务逻辑进行处理,处理完成后,返回必要。DA层主要负责数据库的访问。代码如下:UIL代码展示:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace LoginUI { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btnLogin_Click(object sender, EventArgs e) { 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+"\r\n"+"当前登录用户的密码:" + password,"登录"); } } }
BLL代码展示:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Login.BLL { public class LoginManager { public Login.Model.UserInfo UserLogin(string userName,string password) { DAL.UserDAO uDao = new Login.DAL.UserDAO(); Login.Model.UserInfo user = uDao.SelectUser(userName, password); if (user != null) //login successfully { Login.DAL.ScoreDAO sDao = new Login.DAL.ScoreDAO(); sDao.UpdateScore(userName,10); return user; } else { throw new Exception("登录失败。"); } } } }
DAL代码展示:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; using System.Data.SqlClient; namespace Login.DAL { public class UserDAO { public Login.Model.UserInfo SelectUser(string userName, string password) { using (SqlConnection conn = new SqlConnection(@"Server=DESKTOP-LTBMQSK;Database=Login;User ID=sa;Password=jujianfei")) { { 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.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);//not suggestion if (!reader.IsDBNull(3)) { user.Email = reader.GetString(3); } } return user; } } } } }
实体层代码展示:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; 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;} } }
效果展示:
总结
实体层是封装数据的,保证数据在三个层次之间顺畅流转,独立于其他三个层次,不引用任何一层,而其他三层都需要引用实体,另外三层之间的引用关系是:UIL→BLL→DAL。实体层并不是三层中的一员,简单来看,这就是一个普通的类,不要混淆了。下面展示一幅他们之间的关系图:相关文章推荐
- 系统架构设计——设计模式之装饰者模式
- 网站接入QQ登录的两种方法
- 15年编程生涯,资深架构师总结的7条经验
- Android学习常用网站
- iOS架构 - MVC/MVP/MVVM
- Android官方MVP架构示例项目解析
- 用来学习的网站
- iOS中的两种主要架构及其优缺点
- Java 应用一般架构
- 玩游戏写编程网站
- 原创文章对于网站很重要
- windows系统如何访问国外google等网站的方法之一
- 如何上传织梦做的网站
- 架构设计是多进程还是多线程
- 记录网站被cc攻击后所采取的措施
- Postgresql 9 高可用性 手册
- webkit架构和模块
- 中英文双语营销型网站源码整站分享
- 新手 山寨的 中国人民共和国国务院的官方网站 只能看不能点^.^
- 安卓开发 第五篇 我的安卓应用架构设计-----Repository类