国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
ASP.NET中基類頁的設(shè)計(jì)和使用
在Asp.net業(yè)務(wù)系統(tǒng)的開發(fā)過程中,為了保證頁面風(fēng)格的一致性以及減少重復(fù)代碼的編寫,我們需要引入基類頁的概念,即:定義一個(gè)基類頁,讓所有的頁面都繼承這個(gè)基類,并在該基類頁中加入公用的屬性和方法。

  實(shí)際使用時(shí),按照功能頁面劃分,可以定義多個(gè)基類頁,如:

class FormBase
class BizFormBase :FormBase
class ViewFormBase : BizFormBase
class EditFormBase : BizFormBase
class QueryFormBase : FormBase

  FormBase:基類頁中的根,提供與業(yè)務(wù)無關(guān)的服務(wù),如:URL重寫,日志等。
  BizFormBase:加入和業(yè)務(wù)相關(guān)的屬性,如:該頁面的當(dāng)前業(yè)務(wù)對(duì)象ID等。
  ViewFormBase,:EditFormBase:實(shí)現(xiàn)具體的查看,編輯功能。
  QueryFormBase:實(shí)現(xiàn)對(duì)通用查詢頁面的封裝。

  從面向?qū)ο蟮慕嵌瓤?,基類頁與普通的基類,繼承類設(shè)計(jì)其實(shí)區(qū)別并不大,都要在基類中編寫公用的屬性方法,并通過虛函數(shù)、事件等方式讓繼承類重寫或響應(yīng)。所不同的是基類頁的設(shè)計(jì)過程受到所在環(huán)境的約束。在WinForm環(huán)境下,我們可以預(yù)先定義好窗體的公用元素,如工具條,默認(rèn)的表格以及DataSource控件等。而到了Asp.net下的WebForm,則無法實(shí)現(xiàn)界面一級(jí)的繼承,同時(shí)加入了狀態(tài)管理等要求。

  為了幫助大家理解,我們以查詢基類頁的設(shè)計(jì)過程來分析:

  一個(gè)最簡單的查詢頁面會(huì)包括三部分,多個(gè)查詢條件文本框,查詢按鈕,以及表格。同時(shí)查詢頁會(huì)和一個(gè)數(shù)據(jù)訪問組件關(guān)聯(lián),當(dāng)點(diǎn)查詢時(shí),會(huì)把查詢條件轉(zhuǎn)成where語句提交給數(shù)據(jù)訪問組件。

QueryPeopleForm
OnQueryButtonClick()
{
 string peopleName = txtPeopleName.Text;
 string peopleAge = txtPeopleAge.Text;

 string sql;
 sql = string.Format(“Name Like‘%{0}%’and Age = {1}, PeopleName, peopleAge);

 PeopleManager manager = new PeopleManager();
 this.gridMain.DataSource = manager.GetDataTable(sql);
 this.gridMain.DataBind();
}

  當(dāng)點(diǎn)擊查詢按鈕時(shí),我們做了以下三件事:

  1、獲取查詢條件
  2、提交查詢
  3、將查詢結(jié)果綁定到表格

  這兒的提交查詢和綁定在不同的查詢頁面都是一樣的,于是我們首先把2,3放到基類頁中,并提供這樣一個(gè)方法:void QueryAndBind(IManager manager, string sql);這兒要定義IManager接口,讓所有的Manager都實(shí)現(xiàn)該接口,這樣基類頁就無需知道具體的Manager,只要調(diào)用IManager.GetDataTable方法,然后綁定表格到即可。

  使用基類頁后的代碼:

QueryPeopleForm : QueryFormBase
OnQueryButtonClick()
{
 string peopleName = txtPeopleName.Text;
 string peopleAge = txtPeopleAge.Text;
 sql = string.Format(“Name Like‘%{0}%’and Age = {1}, PeopleName, peopleAge);
 QueryAndBind(new PeopleManager(), sql);
}

  這兒的代碼少了,但仍有問題,當(dāng)查詢條件變化后,每次拼查詢語句的工作即枯燥又容易出錯(cuò),那么我們加入一個(gè)Query類,以簡化這兒的操作:

public enum QueryOperator
{
 //等于比較。
 Equal = 0,
 // 不等于
 NotEqual = 1,
 // Like比較
 Like = 6
}

class Query
{
 void Add(string fieldName, string value, QueryOperator oper);
 string GetSql();
}

QueryPeopleForm : QueryFormBase
OnQueryButtonClick()
{
 Query query = new Query();
 query.Add(“Name”, txtPeopleName.Text, QueryOperator.Like);
 query.Add(“Age”, txtPeopleAge.Text, QueryOperator.Equal);
 QueryAndBind(new PeopleManager(), query.GetSql());
}

  把拼Sql的工作放在Query類中做,調(diào)用者只要聲明查詢字段,對(duì)應(yīng)的值,和比較類型即可。

  到這一步,我們的基類頁已經(jīng)很好用了,但還有一個(gè)小問題,也就是前面說的,在WebForm中無法實(shí)現(xiàn)界面級(jí)的繼承,那么基類頁的QueryAndBind方法,將無法知道查詢結(jié)果要綁定到哪一個(gè)表格,這時(shí)我們的做法是在基類頁中聲明DefaultGrid屬性,讓繼承頁來告知當(dāng)前的表格控件。

  修改后的代碼:

QueryPeopleForm : QueryFormBase
OnQueryButtonClick()
{
 InitControls(gridMain);
 Query query = new Query();
 query.Add(“Name”, txtPeopleName.Text, QueryOperator.Like);
 query.Add(“Age”, txtPeopleAge.Text, QueryOperator.Equal);
 QueryAndBind(new PeopleManager(), query.GetSql());
}

  至此,基類頁的功能已經(jīng)完整了,但仍然不夠,如果我們以后想改變查詢按鈕點(diǎn)擊的行為,比如查詢結(jié)果為空時(shí),要彈出對(duì)話框提示,這時(shí)仍然要到處修改頁面代碼,這不是我們所希望的,于是我們將QueryButton的OnClick操作也放在基類頁了中執(zhí)行,繼承頁只要初始化數(shù)據(jù)訪問組件和設(shè)置查詢條件即可。

QueryPeopleForm : QueryFormBase
void Initialize()
{
 // 指定頁面對(duì)應(yīng)的Manager
 Manager = new PeopleManager();
 // 綁定控件
 InitControls(gridMain, btnQuery);
}

void GetQueryInfo(Query query)
{
 //獲得查詢條件
 query.Add(“Name”, txtPeopleName.Text, QueryOperator.Like);
 query.Add(“Age”, txtPeopleAge.Text, QueryOperator.Equal);
}

QueryFormBase:

private IManager manager = null;
public IManager Manager
{
 get { return manager; }
 set { manager = value; }
}

void InitControls(GridView grid, Button queryButton)
{
 this.defaultGrid = grid;
 this.queryButton = queryButton;
 queryButton.Click += new EventHandler(QueryButton_Click);
}

void QueryButton_Click(object sender, EventArgs e)
{
 Query query = new Query();
 GetQueryInfo(Query);
 QueryAndBind(manager, query.GetSql());
}

  總的代碼可以從附件中下載,大家可以加入斷點(diǎn),看看基類,繼承類頁的代碼執(zhí)行順序。

  應(yīng)該說基類的設(shè)計(jì)相對(duì)復(fù)雜,但好處是繼承頁的代碼變得清楚了,沒有多余重復(fù)的代碼。

  而基類頁的設(shè)計(jì)其實(shí)是有技巧的,總結(jié)起來有以下幾條:

  1、首先以最直接的方式寫出頁面代碼
  2、提取公用方法和添加輔助類
  3、提取事件處理流程到基類頁中
  4、在基類頁中設(shè)計(jì)需要繼承頁重載的方法與事件

  從設(shè)計(jì)上來講,用基類頁的方式來統(tǒng)一操作、簡化頁面代碼是一種非常直觀的方式,缺點(diǎn)是隨著項(xiàng)目的演化,基類頁會(huì)變得大而全,不容易被新的項(xiàng)目重用,這時(shí)我們就可以考慮把其中的一部分功能放到用戶控件和自定義組件中來實(shí)現(xiàn),以減少耦合性和提高重用性。 
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C#面試題和答案
hibernate HQL 模糊查詢 3種方式
本周ASP.NET英文技術(shù)文章推薦[04/01 - 04/07]
怎樣才能成為PHP高手?
MyGeneration學(xué)習(xí)筆記.doc
PHP操作MongoDB簡明教程
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服