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

三层架构的开发

2008-10-06 23:27 169 查看

三层架构的开发

      


         对于B/S架构的三层架构的开发,可能很多的人都已经了解的是比较清楚的。这里用的是最简单的三层架构:ui+bll+dal+dbsqlhelp+model 
         从VS05出来以后由于功能明显比VS03夸张了很多,所以在开发的时候也就很方便。其中以数据的显示最为明显。通过sqldatasource可以几乎一行代码都不需要写,就能在GridView中显示出来数据,并且进行增删查改的操作,但是我个人总感觉这样做是有问题的。因为使用sqldatasource,就明显的破坏了3层架构的基本改变。哪么微软在VS05当中,很重点的推出了objectdatasource这个东西,就是专门用来结合三层架构开发的一个数据源绑定控件。 在层次之间传递的也是object,这样相对来说就比较好一些。
         代码在具体的下边,其实主要就是DataList稍微麻烦一点,别的几个控件都可以自动 实现增删查改的功能,所以基本没什么写太多的代码。!
         在这里主要是DataList的代码,以操作Jobs表为示例。
DbSqlHelp


using System;


using System.Collections.Generic;


using System.Text;


using System.Data;


using System.Data.SqlClient;


namespace DbSqlHelp








{


    public abstract class DbSqlHelp




    



{


        static string StrConn = @"User ID=sa;Password=perishryu;Initial Catalog=pubs;Data Source=OATHRYUSQL2005";


        static SqlDataAdapter da;


        static SqlCommand cmd;


        static SqlConnection conn;


        static DataSet ds;




        public static  DataSet Search(string sql)




        



{


            using (da = new SqlDataAdapter(sql, StrConn))




            



{


                using (ds = new DataSet())




                



{


                    da.Fill(ds);


                    return ds;


                }


            }


        }


        public static bool Make(string sql)




        



{


            using (conn = new SqlConnection(StrConn))




            



{


                using (cmd = new SqlCommand(sql, conn))




                



{


                    if (conn.State != ConnectionState.Closed)




                    



{


                        conn.Close();


                    }


                    try




                    



{


                        conn.Open();


                        cmd.ExecuteNonQuery();


                        return false;


                    }


                    catch(System.Exception ex)




                    



{
                        throw ex;


                    }


                    finally




                    



{


                        conn.Close();


                    }


                }


            }


        }


    }


}



Model



using
 System;


using
 System.Collections.Generic;


using
 System.Text;




namespace
 Model








{


    public class
 Job_Model




    



{


        public
 Job_Model()




        



{


                       }



        
public Job_Model(int id, string desc, int min, int max)




        



{


            this.job_desc =
 desc;


            this.job_id =
 id;


            this.min_lvl =
 min;


            this.max_lvl =
 max;


                       }



        
int job_id;




        public int
 Job_id




        



{




            get 



{ return job_id; }





            
set 



{ job_id = value; }



                       }



        
string job_desc;




        public string
 Job_desc




        



{




            get 



{ return job_desc; }





            
set 



{ job_desc = value; }



                       }



        
int min_lvl;




        public int
 Min_lvl




        



{




            get 



{ return min_lvl; }





            
set 



{ min_lvl = value; }



                       }



        
int max_lvl;




        public int
 Max_lvl




        



{




            get 



{ return max_lvl; }





            
set 



{ max_lvl = value; }



                       }



    }



}





DAL


using System;


using System.Collections.Generic;


using System.Text;


using System.Data;


namespace DAL








{


    public class Job_DAL




    



{


        string sql;


        public DataSet Select_Job_Dal(string jobid)




        



{


            sql = "select * from jobs where job_id='" +jobid + "'";


            return DbSqlHelp.DbSqlHelp.Search(sql);




        }


        public DataSet Select_Job_Dal()




        



{


            sql = "select * from jobs";


            return DbSqlHelp.DbSqlHelp.Search(sql);


        }




        public bool Update_Job_Dal(Model.Job_Model job)




        



{


            sql = "update jobs set job_desc='" + job.Job_desc + "',min_lvl='" + job.Min_lvl + "',max_lvl='" + job.Max_lvl + "' where job_id='" + job.Job_id + "'";


            try




            



{


                return DbSqlHelp.DbSqlHelp.Make(sql);


            }


            catch(System.Exception ex)




            



{


                throw ex;


            }


        }


        public bool Insert_Job_Dal(Model.Job_Model job)




        



{


            sql = "insert into jobs values('" + job.Job_desc + "','" + job.Min_lvl + "','" + job.Max_lvl + "')";


            try




            



{


                return DbSqlHelp.DbSqlHelp.Make(sql);


            }


            catch (System.Exception ex)




            



{


                throw ex;


            }


            


        }


        public bool Delete_Job_Dal(Model.Job_Model job)




        



{


            sql = "delete from jobs where job_id='" + job.Job_id + "'";


            try




            



{


                return DbSqlHelp.DbSqlHelp.Make(sql);


            }


            catch (System.Exception ex)




            



{


                throw ex;


            }


            


        }


    }


}



BLL



using System;


using System.Collections.Generic;


using System.Text;


using System.Data;


namespace BLL








{


    public class Job_BLL




    



{


        DAL.Job_DAL jobdal;


        public DataSet Select_BLL()




        



{


            jobdal = new DAL.Job_DAL();




            



{


                return jobdal.Select_Job_Dal();


            }


        }


        public DataSet Select_BLL(string jobid)




        



{


            jobdal = new DAL.Job_DAL();




            



{


                return jobdal.Select_Job_Dal(jobid);


            }




        }


        public bool Update_BLL(Model.Job_Model job)




        



{


            jobdal = new DAL.Job_DAL();


            try




            



{


                return jobdal.Update_Job_Dal(job);


            }


            catch (System.Exception ex)




            



{


                throw ex;


            }


        }


        public bool Insert_BLL(Model.Job_Model job)




        



{


            jobdal = new DAL.Job_DAL();


            try




            



{


                return jobdal.Insert_Job_Dal(job);


            }


            catch(System.Exception ex)




            



{


                throw ex;


            }


        }


        public bool Delete_BLL(Model.Job_Model job)




        



{


            jobdal = new DAL.Job_DAL();


            try




            



{


                return jobdal.Delete_Job_Dal(job);


            }


            catch(System.Exception ex)




            



{


                throw ex;


            }


        }


    }


}



UI   aspx页面




<%

@ Page Language="C#" AutoEventWireup="true" CodeFile="DataListDemo.aspx.cs" Inherits="DataListDemo" %>




<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">




<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">


    <title>无标题页</title>


</head>


<body>


    <form id="form1" runat="server">


    <div>


        <asp:DataList ID="DataList1" runat="server" DataSourceID="ObjectDataSource1" RepeatColumns="4" RepeatDirection="Horizontal" Width="720px" DataKeyField="job_id" OnCancelCommand="DataList1_CancelCommand" OnEditCommand="DataList1_EditCommand" OnUpdateCommand="DataList1_UpdateCommand" OnDeleteCommand="DataList1_DeleteCommand">


            <ItemTemplate>


                job_id:<asp:Literal ID="Literal1" runat="server" Text='<%#Eval("job_id") %>'></asp:Literal><br />


                job_desc:<asp:Literal ID="Literal2" runat="server" Text='<%#Eval("job_desc") %>'></asp:Literal><br />


                min_lvl:<asp:Literal ID="Literal3" runat="server" Text='<%#Eval("min_lvl") %>'></asp:Literal><br />


                max_lvl:<asp:Literal ID="Literal4" runat="server" Text='<%#Eval("max_lvl") %>'></asp:Literal><br />


                <asp:LinkButton ID="LinkButton1" runat="server" CommandName="Edit">编辑</asp:LinkButton>    


                <asp:LinkButton ID="LinkButton2" runat="server" CommandName="delete">删除</asp:LinkButton>


            </ItemTemplate>


            <EditItemTemplate>


                job_id:<asp:Literal ID="Literal1" runat="server" Text='<%#Eval("job_id") %>'></asp:Literal><br />


                job_desc:<asp:TextBox ID="TextBox1" runat="server" Text='<%#Bind("job_desc") %>'></asp:TextBox><br />


                min_lvl:<asp:TextBox ID="TextBox2" runat="server" Text='<%#Bind("min_lvl") %>'></asp:TextBox><br />


                max_lvl:<asp:TextBox ID="TextBox3" runat="server" Text='<%#Bind("max_lvl") %>'></asp:TextBox><br />


                <asp:LinkButton ID="LinkButton3" runat="server" CommandName="update">更新</asp:LinkButton>


                <asp:LinkButton ID="LinkButton4" runat="server" CommandName="cancel">取消</asp:LinkButton>


            </EditItemTemplate>


           


        </asp:DataList><asp:ObjectDataSource ID="ObjectDataSource1" runat="server" DataObjectTypeName="Model.Job_Model"


            DeleteMethod="Delete_BLL" InsertMethod="Insert_BLL" SelectMethod="Select_BLL"


            TypeName="BLL.Job_BLL" UpdateMethod="Update_BLL" OnUpdating="ObjectDataSource1_Updating" OnDeleting="ObjectDataSource1_Deleting" OnUpdated="ObjectDataSource1_Updated"></asp:ObjectDataSource>


        <asp:Label ID="Label1" runat="server" Text="Label" Width="280px"></asp:Label>


          


    </div>


    </form>


</body>


</html>




UI   CS代码


using System;


using System.Data;


using System.Configuration;


using System.Collections;


using System.Web;


using System.Web.Security;


using System.Web.UI;


using System.Web.UI.WebControls;


using System.Web.UI.WebControls.WebParts;


using System.Web.UI.HtmlControls;


using System.ComponentModel;




public partial class DataListDemo : System.Web.UI.Page








{


    protected void Page_Load(object sender, EventArgs e)




    



{


    }


    protected void DataList1_EditCommand(object source, DataListCommandEventArgs e)




    



{


        this.DataList1.EditItemIndex = e.Item.ItemIndex;


        DataBind();


    }


    protected void DataList1_CancelCommand(object source, DataListCommandEventArgs e)




    



{


        this.DataList1.EditItemIndex = -1;


        DataBind();


    }


    protected void ObjectDataSource1_Updating(object sender, ObjectDataSourceMethodEventArgs e)




    



{


        ((Model.Job_Model)(e.InputParameters[0])).Job_id = job.Job_id;


        ((Model.Job_Model)(e.InputParameters[0])).Job_desc = job.Job_desc;


        ((Model.Job_Model)(e.InputParameters[0])).Min_lvl = job.Min_lvl;


        ((Model.Job_Model)(e.InputParameters[0])).Max_lvl = job.Max_lvl;


        this.DataList1.EditItemIndex = -1;


        DataBind();


    }


    Model.Job_Model job;


    protected void DataList1_UpdateCommand(object source, DataListCommandEventArgs e)




    



{


        job = new Model.Job_Model();


        job.Job_id = Convert.ToInt32(((Literal)(this.DataList1.Items[e.Item.ItemIndex].FindControl("Literal1"))).Text);


        job.Job_desc = ((TextBox)(this.DataList1.Items[e.Item.ItemIndex].FindControl("TextBox1"))).Text;


        job.Min_lvl = Convert.ToInt32(((TextBox)(this.DataList1.Items[e.Item.ItemIndex].FindControl("TextBox2"))).Text);


        job.Max_lvl = Convert.ToInt32(((TextBox)(this.DataList1.Items[e.Item.ItemIndex].FindControl("TextBox3"))).Text);


        ObjectDataSource1.Update();




    }


    protected void DataList1_DeleteCommand(object source, DataListCommandEventArgs e)




    



{


        job = new Model.Job_Model();


        job.Job_id = Convert.ToInt32(((Literal)(this.DataList1.Items[e.Item.ItemIndex].FindControl("Literal1"))).Text);


        ObjectDataSource1.Delete();






    }


    protected void ObjectDataSource1_Deleting(object sender, ObjectDataSourceMethodEventArgs e)




    



{


        ((Model.Job_Model)(e.InputParameters[0])).Job_id = job.Job_id;


        DataBind();


    }


    protected void ObjectDataSource1_Updated(object sender, ObjectDataSourceStatusEventArgs e)




    



{


        if (e.Exception != null)




        



{


            e.ExceptionHandled = true;


            this.Label1.Text = e.Exception.Message;


        }


    }


}



         其他的数据绑定控件(DetailsView,FormView,GridView),代码大同小异,他们都可以自动完成增删改查的功能,所以再这里就不写了。如果有朋友有更好的办法或者建议,可以留言交流一下。需要完整代码的朋友,可以留下EMAIL。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息