首页 / 软件开发 / .NET编程技术 / DotNet数据对象结合的自定义数据对象设计(一) 数据对象与DataRow
DotNet数据对象结合的自定义数据对象设计(一) 数据对象与DataRow2011-08-07 博客园 阿不用Dotnet做开发,不少程序员都在为是用DataSet,DataTable,DataRow(以下简用:DotNet数据对象) 作为项目的数据承载对象还是使用自定义的数据类和自定数据集合而犯难,社区中也有相关话题的不少讨 论。前者作为Ado.net标准的数据集对象,本身有非常强大的功能,但也存在不少的问题,如:弱类型, 非面向对象,数据类对象体积相对较大等。所以不少的设计人员选择了使用了自定义数据类和数据集作为 自己项目的数据承载对象,解决上面的问题的同时也出现了一些其它的问题,比如:数据类编写起来麻烦 ,花时间且没有技术含量,降低开发效率,无法享受到Ado.net提供的很多数据操作的便利如(数据绑定 的离线排序,离线查询,如此等等),如果直接使用Ado.net进行数据访问的话,还需要写比较多的数据 访问层的代码,大大降低了开发效率。关于自定义数据类的话题,MSDN上有一篇很好的文章。《掌握 ASP.NET 之路:自定义实体类简介》本篇就是的主题就是来讨论如何更好地设计自定义数据,让它结合自定义数据对象与DotNet数据对象 无缝结合,发挥各自优点,以利于我们在使用时得心应手。当初考虑这样做主要是原因是要使用 IBatisNet作为持久层工具,而不管是IBatisNet还是NHibernate都是使用自定义数据类与数据集合,它们 都与DotNet数据对象天生没有联系的,如果使用它,而我就无法使用DotNet数据对象了,这样就有点偏离 DotNet的味道了,而在需要的时候再通过一些方法去转换得到DotNet数据对象,就显得麻烦而且复杂得多 。上面的费话引出了我要解决的问题,那下面就详细介绍一下如何去设计这个数据类吧。基本原理就是 ,表现用自定义的数据类作为表现形式,而内部存储数据的部分使用DotNet数据对象作为数据容器。利用 自定义数据类的Property,封装对DataRow的每一列的读取。我们可以这么理解,每一个自定义对象对应 数据库中的每一行记录(DataRow),而一个数据集合就对应数据库的一个表(DataTable)。数据类的定义 就由:1public class CommonDataObject
2{
3 private int id;
4
5 public int ID
6 {
7 get { return id; }
8 set { id = value; }
9 }
10}
变为类似于:1public class DataObject
2{
3 private DataRow m_dataRow;
4
5 public int ID
6 {
7 get
8 {
9 if (m_dataRow["ID"] == DBNull.Value)
10 {
11 return 0;
12 }
13 return (int)m_dataRow["ID"];
14 }
15 set
16 {
17 m_dataRow["ID"] = value;
18 }
19 }
20}