三层架构设计_第1页
三层架构设计_第2页
三层架构设计_第3页
三层架构设计_第4页
三层架构设计_第5页
已阅读5页,还剩76页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第八章三层架构设计所谓的三层架构就是将整个业务应用划分怎么办?网页代码文件中的所有程序都要重新多层开发架构的出现很有效的解决了这样三层架构中,各个层之间的分工是很明确们只需要修改数据访问层,其它的地方不用修等,并针对用户的请求去调用业务逻辑层的功2、业务逻辑层(BLL):针对表示层提交的3、数据访问层(DAL):顾名思义,就是用于专门跟后台数据库进行交互,直接操纵数据表表示层业务逻SQLServerAccessOracle实体理想的分层式架构,应该是一个支持可抽这个框架模型中,出现了一个自定义实体的实体类都是“贫血实体类”。体类对应数据库的表。但是有些专家意见是慎图7.2显示了实体对象在三层架构中传递用。仍以“BookShopOnNet”数据库中顾客表顾客表的结构为:ShopUser(UserIdintNOTNULL,Passwordsvarchar(20)NOTNULL,Emailvarchar(30),XinMinnvarchar(5),Sexbit,Birthdaydatetime,Addressnvarchar(50),Telvarchar(12),Photovarchar(50),Nationnvarchar(15),Hobbyvarchar(50),PersonURLvarchar(50)。详细说下面来构建这个应用程序解决方案。启动8.2.1实体类设计“ThreeLayerApp”解决方案名,在弹出的快捷项目名“BookShopModel”并确定,这样就在此成员变量,并依据这些成员变量构建相应的属当类的私有成员变量输好后,属性可以用publicclassShopUserModel{privateint_UserId;privatestring_UserName;publicintUserId{get{return_UserId;}set{_UserId=value;}}publicstringUserName{get{return_UserName;}set{_UserName=value;}}}8.2.2数据访问层设计首先在解决方案中添加名为创建的项目名为“BookShopModel”的实体类,“ShopUserDAL”数据访问类,此类中要进行数usingSystem.Configuration;usingSystem.Data;usingSystem.Data.SqlClient;usingBookShopModel;这样构建出来的顾客表所对就的数据访问publicclassShopUserDAL{staticstringstrconn=ConfigurationManagerConfigurationManager.ConnectionStrings["connStr"].ConnectionString;SqlConnectionconn;publicShopUserDAL(){}///<summary>///获取顾客信息数据表视图///</summary>///<returns></returns>publicDataViewGetDataView(){SqlCommandcomm=newSqlCommand("SELECTUserId,UserName,Passwords,Email,XinMin,Sex,Birthday,Address,Tel,Photo,Natnusing(SqlDataAdaptersda=newSqlDataAdapter()){sda.SelectCommand=comm;DataSetds=newDataSet();sda.Fill(ds,"ShopUser");ds.Tables["ShopUser"].DefaultView;}}publicintDeleteByUserId(intUserId){sqltext=string.Format("DeleteFROMShopUserWHEREUserId={0}",UserId);using(SqlCommandcomm=newSqlCommand(sqltext,conn)){intresult=comm.ExecuteNonQuery();ereturnresult;}}UpdatePartInfoByUserId(ShopUserModel{=string=string.Format("UPDATEShopUserXinMin='{1}',Sex='{2}',Birthday='{3}',Email='{4}'WHEREUserId={0}",objUser.UserId,objUser.XinMin,objUser.Sex,objUser.Birthday,objUser.Email);using(SqlCommandcomm=newSqlCommand(sqltext,conn)){intresult=comm.ExecuteNonQuery();ereturnresult;}}UpdateByUserId(ShopUserModelobjUser){stringFormat("UPDATEUserName='{1}',=Email='{2}',XinMin='{3}',Sex='{4}',Birthday='{5}',Address='{6}',Tel='{7}',Photo='{8}',Nation='{9}',Hobby='{10}',PersonURL='objUser.UserName,objUser.Email,objUser.XinMin,objUser.Sex,objUser.Birthday,objUser.Address,nobjUser.Hobby,objUser.PersonURL);using(SqlCommandcomm=newSqlCommand(sqltext,conn)){intresult=comm.ExecuteNonQuery();sereturnresult;}}}publicShopUserModelGetModelByUserId(intUserId){ShopUserModelobjUser=newShopUserModel();stringstrSql="SELECTUserId,UserName,Passwords,Email,XinMin,Sex,Birthday,Address,Tel,Photo,Nation,Hobby,PersonURLFROMShopUserWHEREUserId="+UserId.ToString();using(SqlCommandcomm=newSqlCommand(strSql,conn)){using(SqlDataReadersdr=comm.ExecuteReader()){{erUserId=ConvertConvert.ToInt32(sdr["UserId"].ToString());jUserUserNamesdr["UserName"].ToString();bjUserPasswordssdr["Passwords"].ToString();erEmailsdr["Email"].ToString();serXinMinsdr["XinMin"].ToString();{erSexConvert.ToBoolean(sdr["Sex"]);}{objUser.Birthday=Convert.ToDateTime(sdr["Birthday"]);}=====objUserobjUser.Addresssdr["Address"].ToString();Telsdr["Tel"].ToString();Photosdr["Photo"].ToString();rNationsdr["Nation"].ToString();Hobbysdr["Hobby"].ToString();objUser.PersonURLsdr["PersonURL"].ToString();}}e}returnobjUser;}}======8.2.3业务逻辑层设计在解决方案中添加名为“BookShopModel”实体类项目和这样构建出来的顾客表所对就的数据访问publicclassShopUserBLL{ShopUserDALoShopUserDAL=newShopUserDAL();///<summary>///</summary>///<returns></returns>publicpublicDataViewGetDataView(){oShopUserDAL.GetDataView();}///<summary>///</summary>///<paramname="UserId"></param>///<returns></returns>publicintDeleteByUserId(intUserId){oShopUserDAL.DeleteByUserId(UserId);}///<summary>///</summary>///<returns></returns>UpdatePartInfoByUserId(ShopUserModel{oShopUserDAL.UpdatePartInfoByUserId(objUs}///<summary>///</summary>///<returns></returns>publicintUpdateByUserId(ShopUserModelobjUser){oShopUserDAL.UpdateByUserId(objUser);}///<summary>///</summary>///<paramname="UserId"></param>///<returns></returns>publicShopUserModelGetModelByUserId(intUserId){oShopUserDAL.GetModelByUserId(UserId);}}8.2.4表示层设计在解决方案中添加名为“WebSite”的站点编写相关的事件,在事件中调用底层提供的功件之一,它以表格的形式显示数据库的内容。AutoGenerateColumns属性为True,GridView会使用反射来处理所有字段并按发现BoundField:以文本形式显示数据的普通绑定“DataField”属性设置数据从数据源的哪个字“DataNavigateUrlFormatString”两个属性,配合构建超链接的URL,用“DataTextField”还有一个DataField和来设置要绑定显示的数据列名,DataTextFormatString属性用来对DataField例如,我们想在GridView显示ShopUser列的标题是“出生日期”。对于HyperLinkField列,还有DataNavigateUrlFields和配合构建超链接的URL。比如:而DataNavigateUrlFormatString属性的值为string.Format("ShowUser.aspx?UserId={0}",UserId字符串。置各字段显示时的样式,如利用HeadStyle、HeaderTemplate:头模板,即表头部分使用的FooterTemplate:脚模板,即脚注部分使用的EditItemTemplate:编辑项模板,数据处于编最后利用TemplateField的HeadStyle、如果GridView的数据源是一个另一个与分页有关的事件PageIndexChanged,PageIndex属性:获取或设置当前显示页的索SortExpression属性,它是数据源中的相应字ingSortExpress属性:通过它设置作为排序列的AutoGenerateColumns属性:设置是否自动创建绑定字段,默认为true,实际开发中很少自Columns属性:GridView控件中列字段的集它以后,从DataKeys[]主键集合中就可以取出GridView必须把主键字段做成数组后赋给其{"UserId"};GridView1.DataKeyNames=该行进入编辑状态,当它的值为-1时,退出编PageIndexChanging/PageIndexChanged:这两个事件分别在改变当前页索引之前/之后发SelectedIndexChanging/某行的选择按钮(其CommandName属性值为“Select”的按钮)之前/之后发生,在选择功Sorting/Sorted:这两个事件分别在单击列RowCommand:在GridView中单击按钮时就会发生,所以其中包含的多个按钮都会触发此事RowDeleting/RowDeleted:单击某行的删除钮)时,在从数据源删除记录之前/之后发生,CommandName属性值为“Cancel”的按钮)时发RowUpdating/RowUpdated:单击某行的更新按钮(其CommandName属性值为“Update”的按钮)后,在更新数据源记录之前/之后发生,DeleteCommand、UpdateCommand事件的发生机情页,电子邮件也是超链接,单击它自动利用录进行全面编辑。GridView控件应用之一。单击右上方“编辑列”快捷菜单,利用、、、、SortExpression属性值,没有设置SortExpression属性的列不启用排序。利用利用HyperLinkField,添加姓名、电子邮件、常浏览网址和编辑3个列,设置它们的DataNavigateUrlFielde超链接列转为模板列后列属性设计界面加一个模板列TemplateField,然后设计它的的宽度和水平对齐等属性,最后进入“编辑模“Eval("Sex").ToString()=="True"?"男":"女板列。先添加一个模板列,设计好它的标题HeaderText及列宽,然后进入年龄列模板的项的代码privatevoidDataBindToGridView(){string[]UserKey=this.GridView1.DataSource=oShopUserDAL.GetDataView();this.GridView1.DataKeyNames=UserKey;标签的Text属性绑定到表达式(1)事件的编写定protectedvoidPageprotectedvoidPage_Load(objectEventArgse)}e.e.Row.Attributes.Add("onmouseover",backgroundColor='LightBlue';");e.Row.Attributes.Add("onmouseout",}}this.GridView1.DataBind();}protectedprotectedvoidGridView1_RowDataBound(objectsender,GridViewRowEventArgse){if(e.Row.RowType==是数据行{RowType是玫举类型DataControlRowType排序事件,为了克服WEB应用程序的无状DataView具有排序功能,只需指定排序关键字protectedvoidGridView1_Sorting(objectsender,GridViewSortEventArgse){if(ViewState["SortDirection"]==ViewState["SortDirection"]={(ViewState["SortDirection"].ToString()==ViewState["SortDirection"]=ViewState["SortDirection"]=}ViewState["SortKey"]=e.SortExpression;DataViewdv=oShopUserDAL.GetDataView();dv.Sort=ViewState["SortKey"].ToString()+""+ViewState["SortDirection"].ToString();this.GridView1.DataSource=dv;this.GridView1.DataBind();}protectedvoidGridView1_PageIndexChanging(objectsender,GridViewPageEventArgse){GridView1.PageIndex=e.NewPageIndex;DataBindToGridView();}然后设置它的“CommandName”为“Delete”。值,可以根据设定的DataKeyNames属性,用启用编辑有两种方式,一是用超链接的方编辑事件的代码中,主要用“this.GridView1.EditIndex=取消事件的代码中,主要用子邮件”四个字段进行更新,其中“电子邮件”绑定数据源,选中GridView,设置行高,网络单击右上方“编辑列”快捷菜单,利用TemplateField。为此把所有的列都转换成模板有转换后才能为删除按钮添加确认对话框,为CommandArgument。把按钮列转换为模板后,设EditItemTemplate中内容删空,因为没有定义EditItemTemplate的列在编辑状态时会使用“姓名”列模板项的设计界面击它的“编辑项”快捷菜单,静态绑定“男”Value”值,如图右下所示,并把单选按钮组“性别”列模板项的设计界面<asp:GridViewID="GridView1"runat="server"AutoGenerateColumns="False"onrowcancelingedit="GridView1_RowCancelinonrowdeleting="GridView1_RowDeleting"onrowediting="GridView1_RowEditing"onrowupdating="GridView1_RowUpdating">s<asp:TemplateFieldHeaderText="编号">laterunat="server"Text='<%#Eval("UserId")%>'></asp:Label>emplate</asp:TemplateField>lateText='<%#runat="server"Eval("UserName")%>'/>emplate</asp:TemplateField><asp:TemplateFieldHeaderText="姓名">EditItemTemplate><asp:TextBoxID="txtXinMin"runat="server"Text='<%#Bind("XinMin")%>'/></EditItemTemplate>late<<asp:HyperLinkID="HyperLink2"runat="server"NavigateUrl='<%#Eval("UserId","ShowShopUserById.aspx?UserId={0}")%>'Text='<%#Eval("XinMin")%>'/>emplate</asp:TemplateField><asp:TemplateFieldHeaderText="性别">EditItemTemplate><asp:RadioButtonListID="rblSex"runat="server"RepeatDirection="Horizontal"SelectedValue='<%#Bind("Sex")%>'><asp:ListItemValue="True">tItem<asp:ListItemValue="False">aspListItem></asp:RadioButtonList></EditItemTemplate>lateaspaspGridView>(2)事件的编写EvalEval("Sex").ToString()=="True"?"男":"女"%>'/>emplate定protectedvoidPage_Load(objectEventArgse){}调用的绑定代码privateprivatevoidDataBindToGridView(){string[]UserKey={"UserId"};//GridView设置主键,主键必须是数组,与this.GridView1.DataSourceoShopUserDAL.GetDataView();=thisthis.GridView1.DataKeyNames=UserKey;this.GridView1.DataBind();}sender,GridViewEditEventArgse){this.GridView1.EditIndex=e.NewEditIndex;//设置编辑行索引就进入编DataBindToGridView();}protectedvoidGridView1_RowCancelingEdit(objectsender,GridViewCancelEditEventArgse){this.GridView1.EditIndex=-1;//设编DataBindToGridView();}protectedGridView1_RowDeleting(objectGridViewDeleteEventArgse){//intUserId=Convert.ToInt32(this.GridView1.DataKeys[e.RowIndex].Value);intUserId=Convert.ToInt32(((LinkButton)(this.GridView1.Rows[e.RowIndex].FindControlintresult=oShopUserDAL.DeleteByUserId(UserId);Response.Write("<script>alert('删除ResponseResponse.Write("<script>alert('删除DataBindToGridView();}protectedGridView1_RowUpdating(objectGridViewUpdateEventArgse){ShopUserModelobjUser=newShopUserModel();objUser.UserId=Convert.ToInt32(((Label)GridView1.Rows[e.RowIndex].FindControl//objUser.UserId=Convert.ToInt32(this.GridView1.DataKeys[e.RowIndex].Value);//objUser.UserId=Convert.ToInt32(((LinkButton)(this.GridView1.Rows[e.RowIndex].FindControlFindControl("lbnDelete"))).CommandArgumenUserIdobjUser.XinMin=((TextBox)GridView1.Rows[e.RowIndex].FindControl("txtXinMin")).Text;objUser.Sex=Convert.ToBoolean((GridView1.Rows[e.RowIn==oShopUserDAL.UpdatePartInfoByUserId(objUsdex].FindControl("rblSex")RadioButtonList).SelectedValue);控件的类型转换objUser.BirthdaydControltxtEmail")asTextBox).Text;ndex].FindControlTextBox).Text);objUserEmailConvert.ToDateTime((GridView1.Rows[e.RowI("txtBirthday")asthis.GridView1.EditIndex=-1;//更新态DataBindToGridView();}它的“AutoPostBack”属性为“True”然后为此种格式等宽显示,如图所示,并配置好成为<asp:GridViewID="GridView1"runat="server"……><asp:TemplateField>rTemplate<asp:CheckBoxID="chkAll"runat="server"AutoPostBack="True"Text="oncheckedchanged="oncheckedchanged="chkAll_CheckedChanged"aderTemplateatepGridView(2)事件的编写<<asp:CheckBoxID="chkItem"runat="server"/>mplate</asp:TemplateField>aterunat="server"Text='<%#"{0:yyyy-MM-dd}")%>'onFocus="WdatePicker()"></asp:TextBox>mplate</asp:TemplateField>Bind("Birthday",Width="80px"定protectedvoidPage_Load(objectsender,EventArgse){}调用的绑定代码privatevoidDataBindToGridView(){this.GridView1.DataSource=oShopUserDAL.GetDataView();this.GridView1.DataKeyNames=newthis.GridView1.DataBind();}protectedGridView1_RowDataBound(objectGridViewRowEventArgse){DataControlRowType.DataRow){stringtxtSexLabel).Text;//查找性别文本e.Row.Cells[4].ForeColorSystem.Drawing.Color.Red;//改为红色====}}protectedchkAll_CheckedChanged(objectEvent

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论