我在学习三层结构,今天写了个添加留言的程序,大家帮我看看代码,三层是这样做的吗?
我一共建了4个项目,分别是 BLL、DAL、Model、Web,(呵呵,学书上讲的)
代码下面列出。
我觉得那个 BLL 的业务逻辑层好像没什么用,好像只是做了个中转,为什么不让前台页面直接调用DAL里的guestbook.cs的方法,处理数据库呢?不理解!
还有,Model实体层,我也不懂这样做有什么好处?
小弟刚学,请大家抽出宝贵时间帮我看看,指点一下小弟,万分感谢!
1、Web层
只有一个页面,显示留言内容列表,和添加留言
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using BLL;
using Model;
namespace GuestBook
{
/// <summary>
/// index 的摘要说明。
/// </summary>
public class index : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox TextBox1;
protected System.Web.UI.WebControls.TextBox TextBox2;
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.DataGrid DataGrid1;
Business bll=new Business();
Common com=new Common();
Gb gb=new Gb();
private void Page_Load(object sender, System.EventArgs e)
{
GetList();
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.DataGrid1.DeleteCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_DeleteCommand);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void Button1_Click(object sender, System.EventArgs e)
{
gb.name=this.TextBox1.Text.Trim();
gb.content=this.TextBox2.Text.Trim();
if(bll.Add(gb))
{
this.Label1.Text= "添加成功! ";
this.TextBox1.Text= " ";
this.TextBox2.Text= " ";
}
else
{
this.Label1.Text= "添加失败! ";
}
GetList();
}
public void GetList()
{
this.DataGrid1.DataSource=bll.GetList();
this.DataGrid1.DataKeyField= "id ";
this.DataGrid1.DataBind();
}
private void DataGrid1_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
try
{
bll.Del(Convert.ToInt32(this.DataGrid1.DataKeys[e.Item.ItemIndex]));
Response.Write(com.Alert( "删除成功! "));
}
catch
{
Response.Write(com.Alert( "删除失败! "));
}
GetList();
}
}
}
2、BLL业务逻辑层Business.cs
using System;
using System.Data;
using DAL;
using Model;
namespace BLL
{
/// <summary>
/// Business 的摘要说明。
/// </summary>
public class Business
{
guestbook gb=new guestbook();
public Business()
{
}
#region 留言
/// <summary>
/// 添加留言
/// </summary>
/// <param name= "mygb "> </param>
/// <returns> </returns>
public bool Add(Gb mygb)
{
return gb.InsertGB(mygb);
}
/// <summary>
/// 读取全部留言
/// </summary>
/// <returns> </returns>
public DataSet GetList()
{
return gb.GetGB();
}
/// <summary>
/// 删除留言
/// </summary>
/// <param name= "id "> </param>
/// <returns> </returns>
public bool Del(int id)
{
return gb.DelGB(id);
}
#endregion
}
}
[解决办法]
是三层.呵呵~~~~
[解决办法]
你试着把三层全写在一层上,然后在改一下数据库ID字段名,如把name改成userName,你看看写成三层改起相关代码量和全写在页面.cs里改的代码量哪个大
[解决办法]
1. 类名应该大写
2. Page_Load绑定应该加IsPostBack判断
3. 删除之后e.Item.EditItemIndex = -1;
4.
if ( Conn.State.ToString() == "Open " )
=======================================
if (Conn.State == ConnectionState.Open)
5.
public SqlDataReader ExecuteSqlDataReader( string strSQL )
========================================================
这个方法没什么价值,连接一关,DataReader就over
[解决办法]
to zhangsn()
Button1建议改为btn_Save或其他
DataGrid1建议改为dg_GuestBookItems或其他
这样大多数人一看id就知道这个控件大概是干什么的了(个人观点仅供参考)
[解决办法]
说的简单点:
BLL层,你要做什么判断,就放在这行啦。例如发布的内容不能为空啊,只有管理员才能删除啊等等。
Model,这是抽象出一个对象,面向对象嘛,然后在层之间传输一个实体对象。
[解决办法]
分层其实就是为了知道在哪里做什么,形成一定的规律后,你开发的速度自然快。
有规律的做事情效肯定效率会高一点