实战 .Net 数据访问层 - 7

原创 2004年05月09日 11:08:00

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

最后,和大家讨论一个由于引入Def而产生的技术问题。

老规矩,还是先请各位看一段代码:

 

代码6Interface Inheritance下的Def多态问题

public abstract class DefBase : IList, IDictionary

{

    // 既是Interface方法,又被声明为virtual

    public virtual IEnumerator GetEnumerator()

    {

       if (_al != null)

           return _al.GetEnumerator();

       else if (_ht != null)

           return _ht.GetEnumerator();

       else

       {

           // 抛出基类无法处理异常

           throw new Exception(

"Do not handle interface method in DefBase class !");

       }

    }

}

 

public class MyDef: DefBase, IList, IEnumerable

{

    // 既是Interface方法,又被声明为override

    public override IEnumerator GetEnumerator()

    {

       try

       {

           // 先调用DefBaseInterface方法,

           //   如果基类无法处理,截获其抛出的异常

           return base.GetEnumerator();

       }

       catch

       {

           if (this._ostOrm != null)

              return GetList().GetEnumerator();

           else if (this._xmlNode != null)

              return _xmlNode.GetEnumerator();

           else if (this._xmlDoc != null)

              return _xmlDoc.GetEnumerator();

           else

              throw new Exception(

"Do not handle interface method in MyDef class !");

           }

       }

    }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

不知道注释部分是否已表述清楚:当继承自Interface后,由于还是存在Base ClassDefBase)这样一个事实,MyDef如果要扩展这个Interface实现,就不得不进行virtual / override声明!

同时,由于MyDef实例也存在“仅使用DefBase Interface Implementation足矣”这种情况(例如:Entity Type就是ArrayListHashtable),促使我们不得不采用一些非常手段进行调理!

 

这里,作者采用了异常处理的方法进行判断(有点取巧的味道),一旦基类DefBase无法处理,就直接throw exception(如果考虑全面点,还需事先定义exception type以进行过滤处理),这样层层往上推进,如果最后进行catch的类依然无法处理,那就真的是系统异常了!

还有一种做法稍微复杂点:在DefBase中可以返回null并在MyDef中进行判断,不过,对于不返回任何值或返回值为ValueTypeInterface Method,就必须另辟蹊径了(例如:单独定义一个Null Type Class进行处理,类似.NET Framework中的System.DBNull)!

 

下一段:http://www.csdn.net/develop/Read_Article.asp?id=27550

.net中的数据访问层的封装

当年.net项目中自己封装的数据访问层,个人感觉使用非常方便
  • kevin_xf
  • kevin_xf
  • 2016-12-05 15:53:47
  • 922

ASP.NET数据访问层

  • 2014年03月12日 21:01
  • 3KB
  • 下载

.Net企业级应用架构设计之数据访问层

综述 数据访问层的设计很大程度上取决于项目干系人需求的影响。例如,数据访问层应该持久化对象模型还是简单的的值的集合?数据访问层应该支持一种数据库还是多种数据库?下面仔细分析数据访问层的常见功能需求。 ...
  • fengyarongaa
  • fengyarongaa
  • 2012-09-12 12:17:01
  • 6784

Asp.net mvc 数据访问层

理解了一些概念,本节开始尝试创建属于自己的数据访问层,说道数据访问层那必须有数据库咯(数据集合也算,此处以数据库为例),没有数据库就没有数据访问层。 1、先创建属于自己的数据库       打开已...
  • u013108485
  • u013108485
  • 2016-04-14 16:19:06
  • 5107

asp.net的通用数据库访问层源码

  • 2006年02月23日 09:05
  • 242KB
  • 下载

.NET下数据访问层+webform前台 技术大比拼

转一篇过去的文章,不过还是有些借鉴意义: 现在在.NET下做数据访问层的技术实在是太多了,选择多了就是没有选择。感觉.net对比java还太年轻需要时间来沉淀。java虽然框架多,但优秀的都沉淀...
  • GoodShot
  • GoodShot
  • 2013-05-13 09:11:19
  • 2038

实战 .Net 数据访问层 - 23

 u     使用现成的框架Ø        首选当然是.NET Framework即将正式推出的ObjectSpaces!Ø        如果希望Total Solution,Borland EC...
  • zhangxuefeng
  • zhangxuefeng
  • 2004-05-09 10:50:00
  • 1993

实战 .Net 数据访问层 - 3

 2.        Data Entity Façade       代码2:传统Data Entity// Customer1:包含基本字段的Customer,属轻量级Data Entity[Se...
  • zhangxuefeng
  • zhangxuefeng
  • 2004-05-07 22:03:00
  • 752

实战 .Net 数据访问层 - 21

 (2)    EntityConvert这个东东是模仿System.Convert的产物,刚开始没觉得咋样,用起来还真有点舍不得呢(本文开头的代码1中曾经使用过这个Utility)!不信,且看如下代...
  • zhangxuefeng
  • zhangxuefeng
  • 2004-05-09 10:49:00
  • 1736

实战 .Net 数据访问层 - 19

 6.       ASPECTAOP(Aspect Oriented Programming)可能是最近几年被挖掘出来的最具震撼力的技术之一,作者并不打算在此花什么篇幅介绍它(网上资料已多如牛毛),...
  • zhangxuefeng
  • zhangxuefeng
  • 2004-05-09 10:50:00
  • 1777
收藏助手
不良信息举报
您举报文章:实战 .Net 数据访问层 - 7
举报原因:
原因补充:

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