三层的学习我们已经走过,现在我们来了解一下到底什么是三层,顺便我们将例子中的C#版本的拿来说道说道。
我们所说的三层是指逻辑上的三层,这点我们需要搞清楚,分别是 UI/BLL+DAL/DB,当然了这里的DB指的是数据库,而这个呢就是我们所说的真正三层,但是我们在平常交流是经常试讲BLL和DAL分开,这样就成了显示层UI、业务逻辑层BLL 、数据访问层DAL这三层。既然有逻辑上的三层,那么必然有物理上的三层,那就是显示层、业务层、数据层,它们所对应的就是用户界面、应用逻辑、数据库。
而在这三层之外还存在一个公用的东东叫做实体,三层之间同时存在着互相调用,关系是:UI→BLL→DAL来达到解耦的效果,并提高系统的稳定性。
在具体的应用中呢调用关系是这个样子的:首先在实体中定义需要调用的属性,在U层中将值传进实体中,调用B层中方法同时将实体中的参数传过去,接着B层调用D层的方法,将实体再传进去,D层连接数据库将按条件查询到的内容传回B层,B层对数据进行验证,接着传回U层,这样就完成了三层。
下面就将C#的例子拿来,大家看着例子好好琢磨一下。
U层:
namespace loginUI
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnlogin_Click(object sender, EventArgs e)
{
//若是没有三层结构应该这样
//IDbConnection conn = new sqlconnection();
//IDbConnection cmd = conn.CreateCommand();
//cmd.commandtext = "select UserName From USERS WHERE";
//对实体进行赋值
string userName=txtUserName .Text .Trim ();
string password = txtPassword .Text;
//实例化B层的方法,实现调用并传值
login.BLL.loginManager mgr = new login.BLL.loginManager();
login.Model.UserInfo user = mgr.Userlogin(userName, password);
MessageBox.Show("登录用户:"+user.UserName );
}
}
}
B层
namespace login.BLL
{
public class loginManager
{
public login.Model .UserInfo Userlogin(string userName, string password)
{
//实例化D层,并将值进行传递
login.DAL.UserDAO uDAO = new login.DAL.UserDAO();
login .Model .UserInfo user= uDAO.SelectUser(userName ,password );
//对D层返回的数据进行验证
if (user != null)//login successfully.
{
login.DAL.ScoreDAO sDAO = new login.DAL.ScoreDAO();
sDAO.UpdateScore(userName, 10);
return user;
}
else//失败
{
throw new Exception("登陆失败。");
}
}
}
}
D层
namespace login.DAL
{
public class UserDAO
{
public login.Model .UserInfo SelectUser(string userName, string password)
{
using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))
{
//定义数据库连接符
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);
if (!reader.IsDBNull(3))
{
user.Email = reader.GetString(3);
}
}
return user;
}
}
}
}
希望能给大家带来一些帮助,但是不要复制粘贴,要亲自动手将这些代码敲上去,这样才能更加深刻的理解三层的含义。