三层Web体系结构里的两种数据绑定模式

转载 2007年09月19日 16:33:00
本文我将介绍在三层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对象的功能。

  对于 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();
 }
}
  正如您所看到的,这种方法既去掉了第一种方法的缺点,又具有第二中方法的有点。  

ASP.net:三层Web体系结构里的两种数据绑定模式

引言  本文我将介绍在三层Web体系开发中的两种数据绑定模式,然后在不超过你已经会用的控件知识的情况下,来介绍能够极大减少这种数据绑定模式的替代品--XLib库文件。具体的说,本文开始我们介绍在三层体...
  • shenvo
  • shenvo
  • 2007年05月19日 14:43
  • 353

三层Web体系结构里的两种数据绑定模式

三层Web体系结构里的两种数据绑定模式引言   本文我将介绍在三层Web体系开发中的两种数据绑定模式,然后在不超过你已经会用的控件知识的情况下,来介绍能够极大减少这种数据绑定模式的替代品--XLib库...
  • JOHNCOOLS
  • JOHNCOOLS
  • 2006年12月25日 11:42
  • 832

ASP.net:三层Web体系结构里的两种数据绑定模式

引言  本文我将介绍在三层Web体系开发中的两种数据绑定模式,然后在不超过你已经会用的控件知识的情况下,来介绍能够极大减少这种数据绑定模式的替代品--XLib库文件。具体的说,本文开始我们介绍在三层体...
  • greyls
  • greyls
  • 2007年07月10日 17:56
  • 980

理解JSP的两种体系结构

最近已经有了很多相关的介绍,JSP正在成为一种卓越的Java技术,可用于创建动态Web应用程序。Java程序员之所以喜爱JSP有数不清的理由。有些人喜欢它为交互式页面带来的"一次编写,处处使用"的方式...
  • zaowei21
  • zaowei21
  • 2007年05月22日 10:54
  • 838

三层体系结构与数据库 编程

接要 本文主要介绍了基于三层体系结构的网络数据库设计,并结合面向对象,分布式数据库开发等理论。全文围绕一个典型而简单的例子,通过VB编程语言,从分析、建模、设计、编码等各个角度对三层体系与数据库进行了...
  • didoleo
  • didoleo
  • 2005年01月03日 14:47
  • 1628

B/S三层架构[转载]

 三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思...
  • duqi_2009
  • duqi_2009
  • 2010年11月30日 13:05
  • 13951

客户/服务器三层架构

SUNY2000 的未来--客户/服务器三层架构单层、双层、三层、多层  IT行业的一大特点是经常创造一些新名词,单层和双层这两个概 念就是在三层结构出现之后才创造出。单层结构是80年代以来小型应用的...
  • daichanglin
  • daichanglin
  • 2007年04月11日 10:57
  • 1841

三层结构的简单描述及优点,bs三层,web三层,j2ee三层

三层结构的简单描述及优点,bs三层,web三层,j2ee三层 三层结构的简单描述及优点   三层体系结构,即用户层、应用层和数据库服务器。用户层主要指用户界面,它要求尽可能的简单,使最终用...
  • pianistOfSoftware
  • pianistOfSoftware
  • 2016年07月14日 12:52
  • 2320

两种网络体系结构

1.客户/服务器体系结构(主要) 每个应用由两个分开但是相关的程序组成。实际上,运行客户端的程序的计算机称为服务器,(虚拟主机是将域名解析到动态IP上的,运营商给的IP,外网不能...
  • shilurujinyiguan
  • shilurujinyiguan
  • 2017年01月24日 18:12
  • 505

软考之路(六)---数据库---深入浅出 三层模式两级映像

总的来看,说了这么多,它都在基于分层的思想,解耦的观念深入到各个方面,学习的联系无处不在,多多得与已有的知识关联,学习起来不陌生,也较好的理解、效率也高,网越织越密。...
  • lishehe
  • lishehe
  • 2014年05月09日 08:13
  • 6188
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:三层Web体系结构里的两种数据绑定模式
举报原因:
原因补充:

(最多只允许输入30个字)