您的位置:首页 > 运维架构 > 网站架构

【三层架构】登陆实例

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。实体层并不是三层中的一员,简单来看,这就是一个普通的类,不要混淆了。下面展示一幅他们之间的关系图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: