首页 > 编程 > .NET > 正文

实战 .Net 数据访问层 - 6

2024-07-10 13:03:23
字体:
来源:转载
供稿:网友
  • 网站运营seo文章大全
  • 提供全面的站长运营经验及seo技术!
  • 回到最初的代码1,作者通过daf的不同调用总共得到了5种不同的data entity对象:datatable,dataset,mycustomer,ilist,dbdatareader,奇怪的是,只有第三次调用才返回真正的data entity对象:mycustomer,这不是和上面所说的data entity façade自相矛盾吗?

    且慢,下面的代码或许能够说明一些问题:




    代码5:def如何表现不同数据类型?

    // defbase:提供大部分应用程序所需的基本data entity支持,

    // 包括collection,ado.net

    [serializable()]

    public abstract class defbase : ilist, idictionary

    {

    public static implicit operator dataset(defbase def)

    {

    return def._dst;

    }

    public static implicit operator datatable(defbase def)

    {

    return def._tbl;

    }

    public static implicit operator dbdatareader(defbase def)

    {

    return def._rdr;

    }

    ...

    }


















































    上面的defbase说明了四个问题:



    (1) 对于继承接口有一定难度的数据类型,如:datatable,dataset,dbdatareader,统统采用implicit operator进行内部数据类型转换,转换后的结果即为data entity的实际数据类型,这样调用比较方便,也容易扩展(例如:本来需要返回datatable,今后可能改为dbdatareader或其它数据类型,此时,data entity / data access的接口都无须改动,调用者也只是改用其它implicit operator进行访问即可得到想要的数据);

    (2) 对于继承接口非常方便的数据类型,如:ilist,直接继承接口并实现之(上述的dbdatareader也可以通过继承idatareader实现,但就目前的ado.net 2.0而言,由于实现idatareader的类几乎全部从dbdatareader继承,所以,直接使用implicit operator更为实用)!

    (3) 无论上面那种类型,data entity内部都会维护一个指向实际数据成员的对象,该对象反映了数据的真实面目;

    (4) 对于只需要暴露基本对象字段的single object,直接使用data entity本身(mycustomer)即可,这种情况,就与我们在o/r mapping中调用data entity时一模一样了!



    对于defbase不能解决的问题,就需要具体的应用程序去处理了。例如:考虑到generic因素,defbase暂不支持xml数据存储,开发人员就可以在自己的应用程序中建立customized data entity facade,使其支持xml,然后,具体的data entity class就可以直接从customized data entity façade继承(当然,如果data entity class无须支持xml,也可从defbase继承)并使用其xml支持功能!

    上面代码3中的mydef / mycustomer就是为了这个目的而构建出来,既使用了framework的功能,又可以在此基础上进行扩充。



    下一段:http://www.csdn.net/develop/read_article.asp?id=27549
    发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表