引言
本文我将介绍在三层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"]; … } |