All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
专家详解:复杂表达式的执行步骤_.net资料_编程技术
asp.net结合js的网页打印程序_[Asp.Net教程]
理论:论C#变得越来越臃肿是不可避免的_.net资料_编程技术
Linux系统下Apache服务器设置与优化_php资料_编程技术
js关于document和window对象_JavaScript技术_编程技术
C#中显示XML文件使用实例
关于ASP.net服务器的入侵方法详解_[Asp.Net教程]
在PHP中用Socket发送电子邮件_php资料_编程技术
mscorwks.dll在.Net中的地位以及在.Net代码保护方面的应用_[Asp.Net教程]
跟我学SQL:(一)数据查询_mssql学习_编程技术
Reading number is top 10 pictures
Entered the goddess in the AD1
网上疯传的一篇小学作文《爸爸也治不了妈妈》
[猫扑大杂烩]华东师范墙上看到的捐精告示 15毫升3600元
Men don't mature ten sign
yy365网站上的美女2
Fan bingbing black wings for platform and DanLuoWang believes beauty1
Kim jong il's mistress, national beauty JinYuJi actor3
Lewd,it is too lewd.
中国文革时期的色情图片2
男人巳快沦落成动物了
Download software ranking
asp.netWeb服务器高级编程
Unix video tutorial6
双旗镇刀客A
Red cliff
Tram sex maniac 2 (H) rar bag9
Boxer's Top ten classic battle2
C语言教程TXT
ASP.NET.2.0.XML.高级编程(第3版)
Eclipse 4.2.2 For Win64
尖东毒玫瑰A
aaa published in(发表于) 2013/12/13 9:42:08 Edit(编辑)
三层Web体系结构里的两种数据绑定模式_.net资料_编程技术

三层Web体系结构里的两种数据绑定模式_.net资料_编程技术

三层Web体系结构里的两种数据绑定模式_.net资料_编程技术-你的首页-uuhomepage.com

  引言

  本文我将介绍在三层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 模板完成,并制定绑定规则,类似代码如下:




  您可能已经注意到了在微软提供的例子里使用这种方式对简单应用程序来说,工作的确实相当的好,但是对于稍微复杂的应用程序来说,您就需要不断扩展自己的代码。

  这种方式可以简单数据的维护,例如你需要为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();
 }
}

  正如您所看到的,这种方法既去掉了第一种方法的缺点,又具有第二中方法的有点。






添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.