理解ASP.NET中的三层中的DAL、BLL和USL

来源:互联网 发布:游戏隐藏软件 编辑:程序博客网 时间:2024/05/05 13:49
 
2008-04-18 22:24

一、三层体系架构  1.表示层(USL):主要表示WEB方式,也可以表示成WINFORM方式。如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。
  2.业务逻辑层(BLL):主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理。如果说数据层是积木,那逻辑层就是对这些积木的搭建。
  3.数据访问层(DAL):主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务



  二、具体区分
  1.表示层:主要对用户的请求接受,以及数据的返回,为客户端提供应用程序的访问。
  2.业务逻辑层:主要负责对数据层的操作,也就是说把一些数据层的操作进行组合。
  3.数据访问层:主要看你的数据层里面有没有包含逻辑处理,实际上他的各个函数主要完成各个对数据文件的操作,而不必管其他操作。
  三、总结
  三层结构是一种严格分层方法,即数据访问层只能被业务逻辑层访问,业务逻辑层只能被表示层访问,用户通过表示层将请求传送给业务逻辑层,业务逻辑层完成相关业务规则和逻辑,并通过数据访问层访问数据库获得数据,然后按照相反的顺序依次返回将数据显示在表示层。有的三层结构还加了Factory、Model等其他层,实际都是在这三层基础上的一种扩展和应用)。

一个简单的三层结构ASP.NET代码

Login.aspx
在页面上建用户名和密码的文本框,登录按钮
-----------------------
Login.aspx.cs


protected void Submit_Click(object sender, EventArgs e)
{
DataAccess.Class1 dac = new DataAccess.Class1();
if (dac.CheckLogin(this.UName.Text, this.pwd.Text))
//Response.Write("Success!");
//Response.Redirect("Default.aspx?");
Server.Transfer("Default.aspx");
else
Response.Write("Failed!");
//Server.Transfer("Login.aspx");
}


----------------------------------------------------
Default.aspx

在页面上建GridView,要写内容到数据库的文本框和按钮
-------------------------
Default.aspx.cs


protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
BindData();
}
}
public void BindData()
{//51aspx.com
DataAccess.Class1 dac = new DataAccess.Class1();
DataSet ds = dac.getUsers();
this.GridView1.DataSource = ds.Tables[0].DefaultView;
this.GridView1.DataBind();
}
protected void Button1_Click(object sender, EventArgs e)
{
DataAccess.Class1 dac = new DataAccess.Class1();
DataSet ds = dac.getUsers();
DataRow dr = ds.Tables[0].NewRow();
dr["UsersName"] = this.TextBox1.Text;
dr["Passwords"] = this.TextBox2.Text;
dr["BlogName"] = this.TextBox3.Text;
ds.Tables[0].Rows.Add(dr);
dac.updataBystoredprocedure(ds);
BindData();//51aspx.com
}


-------------------------------------------------------------
Common类库:


//cn
public const string ConnectString = "server=localhost;database=DBxBlog;UID=xBlog;PassWord=123456";
//Sql
public const string Sql_getUser = "select * from Users";
//Table
public const string table_Users = "Users";
//StoredProcedure
public const string StoredProcedure_insert = "insertUsers";


-------------------------------------------------------------------
DataAccess类库(数据层):



SqlConnection cn = new SqlConnection(Common.Class1.ConnectString);
SqlDataAdapter da;
DataSet ds=new DataSet();

//gettable
public DataSet getUsers()
{
SqlCommand cmd = new SqlCommand(Common.Class1.Sql_getUser,cn);
da = new SqlDataAdapter(cmd);
da.Fill(ds,Common.Class1.table_Users);
return ds;
}

//Login
public bool CheckLogin(string name, string pwd)
{
try
{
SqlCommand cmd = new SqlCommand("select count(*) from Users where UsersName='" + name + "'and Passwords='" + pwd + "'", cn);
cn.Open();
int count = -1;
count = Convert.ToInt32(cmd.ExecuteScalar());
if (count < 1)
return false;
return true;
}
catch (Exception ex)
{
return false;
}
}
//textbox updata
public void updata(DataSet ds)
{
SqlCommand cmd = new SqlCommand("insert into Users(UsersName,Passwords,BlogName)valuse(@UsersName,@Passwords,@BlogName)", cn);
cmd.Parameters.Add("@UsersName",SqlDbType.VarChar,20,"UsersName");
cmd.Parameters.Add("@Passwords", SqlDbType.VarChar, 50, "Passwords");
cmd.Parameters.Add("@BlogName", SqlDbType.VarChar, 20, "BlogName");

da=new SqlDataAdapter ();
da.InsertCommand=cmd;
cn.Open();
da.Update(ds,Common.Class1.table_Users);
cn.Close();
}
//stroedprocedure updata
public void updataBystoredprocedure(DataSet ds)
{
SqlCommand cmd = new SqlCommand(Common.Class1.StoredProcedure_insert,cn);
cmd.Parameters.Add("@UsersName",SqlDbType.VarChar,20,"UsersName");
cmd.Parameters.Add("@Passwords", SqlDbType.VarChar, 50, "Passwords");
cmd.Parameters.Add("@BlogName", SqlDbType.VarChar, 20, "BlogName");
cmd.CommandType = CommandType.StoredProcedure;
da=new SqlDataAdapter();
da.InsertCommand=cmd;
cn.Open();
da.Update(ds,Common.Class1.table_Users);
cn.Close();
}
原创粉丝点击