熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP.NET中基類頁的設計和使用[2]

2013-11-13 11:05:15  來源: .NET編程 

  這兒的代碼少了但仍有問題當查詢條件變化後每次拼查詢語句的工作即枯燥又容易出錯那麼我們加入一個Query類以簡化這兒的操作:

  public enum QueryOperator
  {
   //等於比較
   Equal =
   // 不等於
   NotEqual =
   // Like比較
   Like =
  }

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

  QueryPeopleForm : QueryFormBase
  OnQueryButtonClick()
  {
   Query query = new Query();
   queryAdd(Name txtPeopleNameText QueryOperatorLike);
   queryAdd(Age txtPeopleAgeText QueryOperatorEqual);
   QueryAndBind(new PeopleManager() queryGetSql());
  }

  把拼Sql的工作放在Query類中做調用者只要聲明查詢字段對應的值和比較類型即可

  到這一步我們的基類頁已經很好用了但還有一個小問題也就是前面說的在WebForm中無法實現界面級的繼承那麼基類頁的QueryAndBind方法將無法知道查詢結果要綁定到哪一個表格這時我們的做法是在基類頁中聲明DefaultGrid屬性讓繼承頁來告知當前的表格控件

  修改後的代碼

  QueryPeopleForm : QueryFormBase
  OnQueryButtonClick()
  {
   InitControls(gridMain);
   Query query = new Query();
   queryAdd(Name txtPeopleNameText QueryOperatorLike);
   queryAdd(Age txtPeopleAgeText QueryOperatorEqual);
   QueryAndBind(new PeopleManager() queryGetSql());
  }

  至此基類頁的功能已經完整了但仍然不夠如果我們以後想改變查詢按鈕點擊的行為比如查詢結果為空時要彈出對話框提示這時仍然要到處修改頁面代碼這不是我們所希望的於是我們將QueryButton的OnClick操作也放在基類頁了中執行繼承頁只要初始化數據訪問組件和設置查詢條件即可

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

  void GetQueryInfo(Query query)
  {
   //獲得查詢條件
   queryAdd(Name txtPeopleNameText QueryOperatorLike);
   queryAdd(Age txtPeopleAgeText QueryOperatorEqual);
  }

  QueryFormBase:

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

  void InitControls(GridView grid Button queryButton)
  {
   thisdefaultGrid = grid;
   thisqueryButton = queryButton;
   queryButtonClick += new EventHandler(QueryButton_Click);
  }

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

  總的代碼可以從附件中下載大家可以加入斷點看看基類繼承類頁的代碼執行順序

  應該說基類的設計相對復雜但好處是繼承頁的代碼變得清楚了沒有多余重復的代碼

  而基類頁的設計其實是有技巧的總結起來有以下幾條

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

  從設計上來講用基類頁的方式來統一操作簡化頁面代碼是一種非常直觀的方式缺點是隨著項目的演化基類頁會變得大而全不容易被新的項目重用這時我們就可以考慮把其中的一部分功能放到用戶控件和自定義組件中來實現以減少耦合性和提高重用性

[]  []  


From:http://tw.wingwit.com/Article/program/net/201311/15133.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.