三層Web體繫結構裡的兩種資料繫結模式

來源:互聯網
上載者:User
web|資料|體系

  引言

  本文我將介紹在三層Web體系開發中的兩種資料繫結模式,然後在不超過你已經會用的控制項知識的情況下,來介紹能夠極大減少這種資料繫結模式的替代品--XLib庫檔案。具體的說,本文開始我們介紹在三層體繫結構裡常規的資料繫結方法,然後介紹XLib是如何提高這種綁定效率的。

  1、 資料繫結流程

  在三層Web體繫結構裡,通常有四步來完成資料繫結任務:

  1)從資料庫裡載入資料到商務邏輯對象

  2)在Web表單上放置Web控制項並使用商務邏輯對象進行填充資料。

  3)將Web控制項的值拷貝到商務邏輯對象的屬性裡

  4)儲存商務邏輯對象的屬性值到資料庫。

  以具體的Customer為例,在三層應用程式裡最簡單的資料繫結模式的步驟如下:

  1)從資料庫Customer表裡載入合適的顧客記錄

  2)將顧客記錄綁定到Customer業務對象上

  3)將Customer業務對象綁定到Web控制項上

  4)使用者在表單裡輸入資料並單擊Submit進行提交資料

  5)將Web控制項的更新事件綁定到Customer對象上

  6)把Customer上的資訊儲存到表裡

  7)將表裡的資訊儲存到Customer上

  有多種方式執行這個流程,我概括起來有三種:

  1、顯示產生資料繫結方式--使用大家都熟悉的前台方式

  2、Microsoft的方式--使用類型化的DataSet和FormView

  3、XLib方式--使用反射技術和其他的.NET特性來分析綁定--在運行時擷取對象

  1.2 代碼--商務邏輯對象和Web 頁面

  為了具體說明這三種方式的使用方法,我將使用Customer類和EditCustomer頁面作為示範。下面是一些代碼,它將說明具體在什麼地方進行資料繫結。

  通常,Customer類看起來類似如下:

public class Customer
{
 //list all properties
 //CRUD methods
 public void Load()
 {
  //Binding #1
  //Copy database record values into properties
 }
 public void Save()
 {
  //Binding #4
  //Copy properties values into database record
 }

 public void Delete() ;
 //Other methods specific to customer
 public string GetCustomerFullName()..
}
  編輯顧客頁面的代碼類似如下:

//頁面的一些指令
//與Form表單有關的一些顧客屬性
//提交和取消按鈕
  編輯使用者資訊的後台代碼類似如下:

public partial class EditCustomer
{
 protected void Page_Load(object sender, EventArgs e)
 {
  if (!IsPostBack){
   //Check if adding new customer or updating
   if (_isUpdateMode)
    LoadData();
  }
 }

 protected void btnSubmit_Click(object sender, EventArgs e)
 {
  if (!Page.IsValid)
   return;
  SaveData();

  //Go Back
 }

 private void LoadData()
 {
  Customer customer=new Customer();
  customerID=_customerID;
  customer.Load();

  //Binding #2
  //Copy customer properties into control values
 }

 private void SaveData()
 {
  Customer customer=new Customer();
  If (_isUpdateMode)
  {
   customer.ID=_customerID;
   customer.Load();
  }

  //Binding #3
  //Copy control values into customer properties
  customer.Save();
 }
}

  2 三種資料繫結方式

  2.1 方法1:顯式聲明資料繫結方式

  編輯顧客資訊的方法之一是顯式的資料繫結方式,這意味這對於每一個資料繫結都需要執行前面說的四個步驟,例如對於Customer的Load方法,可能的代碼類似如下:

public void Load()
{
 …
 //Load customer record using data reader
 _firstName=(string)dataReader["FirstName"];
 _lastName=(string)dataReader["LastName"];
 …
}
  在這種情況下,當Customer對象有更多屬性時,您就需要編寫更多的代碼來完成資料繫結功能。如果您想為Customer新增加一個屬性,你不得不在6個地方變更:

  1)資料庫

  2)資料繫結1--資料商務邏輯對象

  3)資料繫結2--商務邏輯對象在綁定到Web控制項上

  4)在Web表單上添加新的控制項

  5)資料繫結3--Web控制項綁定到商務邏輯上

  6)資料繫結4--商務邏輯到資料庫上

  正如您所看到的上面方法的缺點--重複工作大且維護困難

  2.2 使用微軟的方式--類型化的DataSet和FormView

  對於這個方法,微軟已經為我們提供了很多例子了,,如果您的程式足夠簡單,那麼您就可以從Customer表裡產生一個類型化的DataSet,並將其綁定到FormView上,由FormView來執行添加和編輯Customer對象的功能,您可以在下面兩個地方發現如何使用他們:

Creating DAL using typed DataSets
Modifying Data using FormView web control
  對於 Database和Business對象之間的綁定,您可以使用類型化的DataSet嚮導完成,對於Busiess和Web控制項之間的綁定您可以使用FormView控制項的InserItemTemplate和EditItemTemplate 模板完成,並制定綁定規則,類似代碼如下:

<asp:TextBox ID="txtLastName" Text='' RunAt="Server" />
  您可能已經注意到了在微軟提供的例子裡使用這種方式對簡單應用程式來說,工作的確實相當的好,但是對於稍微複雜的應用程式來說,您就需要不斷擴充自己的代碼。

  這種方式可以簡單資料的維護,例如你需要為Customer增加一個新的屬性,你就只需要更改三處就可以了:

  1、資料庫

  2、Web Form - EditItemTemplate

  3、Web Form - InsertItemTemplate

  2.3 XLib方式的綁定

  XLib在同時能夠提供前面介紹的兩種綁定方式外,還增加了資料維護方面的靈活性。XLib使用反射技術來自動從商務邏輯對象到資料庫,到Web控制項之間的映射。

  在執行資料庫到商務邏輯對象方面,它使用了XbusinessObjectBinder對象,下面的代碼片斷樣式了Customer對象的代碼:

public class Customer
{
 …
 public void Load()
 {
  dataReader=new XDataReader();

  //Load data using auto-generated query into XDataReader
  //XDataReader works just like data reader - except it automatically
  //converts Database values types into INulllable C# types

  //Binding #1
  XBusinessObjectBinder.FromDataReader(this, dataReader);
 }

 public void Save()
 {
  XDataWriter dataWriter=new XDataWriter();
  //XDataWriter automatically generates INSERT/UPDATE/DELETE sql s
  //statements

  //Binding #4
  XBusinessObjectBinder.ToDataWriter(this, dataWriter)

  dataWriter.Update();
 }
}
  對於商務邏輯到Web控制項的綁定,它提供了XWebControlsBinder 控制項,下面代碼片斷顯示了顧客編輯頁面的代碼:

public partial class EditCustomer
{
 protected void Page_Load(object sender, EventArgs e)
 {…}

 protected void btnSubmit_Click(object sender, EventArgs e)
 {…}

 private void LoadData()
 {
  Customer customer=new Customer();
  customerID=_customerID;
  customer.Load();

  //Binding #2
  XWebControlsBinder.FromObject(this, customer);
 }

 private void SaveData()
 {
  Customer customer=new Customer();
  if (_isUpdateMode)
  {
   customer.ID=_customerID;
   customer.Load();
  }

  //Binding #3
  //Copy control values into customer properties
  XwebControlsBinder.ToObject(this, customer);

  customer.Save();
 }
}
  正如您所看到的,這種方法既去掉了第一種方法的缺點,又具有第二中方法的有點。



相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。