实战 .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平台的分层架构实战(七-外一篇)——对数据访问层第一种实现(Access+SQL)的重构

昨天的文章 基于.NET平台的分层架构实战(七)——数据访问层的第一种实现:Access+SQL发布后,很多朋友对我的程序提出了意见和建议,在这里先谢谢你们!!!尤其是 金色海洋(jyk),对我的程序...

基于.NET平台的分层架构实战(九)——数据访问层的第三种实现:基于NBear框架的ORM实现

前面的文章讨论了使用SQL语句和存储过程两种数据访问层的实现方式,这一篇里,将讨论使用ORM方式实现数据访问层的方法。      对象-关系映射(Object/Relation Mapping,简称O...

基于.NET平台的分层架构实战(八)——数据访问层的第二种实现:SQLServer+存储过程

  在上一篇中,讨论了使用SQL构建数据访问层的方法,并且针对的是Access数据库。而这一篇中,将要创建一个针对SQLServer数据库的数据访问层,并且配合存储过程实现。  曾经有朋友问我使用SQ...
  • wnety
  • wnety
  • 2011年07月01日 10:06
  • 297

基于.NET平台的分层架构实战(九)——数据访问层的第三种实现:基于NBear框架的ORM实现

  前面的文章讨论了使用SQL语句和存储过程两种数据访问层的实现方式,这一篇里,将讨论使用ORM方式实现数据访问层的方法。  对象-关系映射(Object/Relation Mapping,简称ORM...
  • wnety
  • wnety
  • 2011年07月01日 10:08
  • 412

基于.NET平台的分层架构实战(七)——数据访问层的第一种实现:Access+SQL

经过上面篇文章的介绍,整个系统的框架算是基本搭建完了,下面,我们要具体实现各个层次。关于数据访问层的实现,我准备讨论三种实现方式,这一篇文章讨论第一种:Access+动态生成SQL。      顾名思...

基于.NET平台的分层架构实战(八)——数据访问层的第二种实现:SQLServer+存储过程

在上一篇(基于.NET平台的分层架构实战(七-外一篇)——对数据访问层第一种实现(Access+SQL)的重构)中,讨论了使用SQL构建数据访问层的方法,并且针对的是Access数据库。而这一篇中,将...

wa_lab .net数据访问层 组件 类

  • 2007年09月29日 12:29
  • 125KB
  • 下载

mvc.net分页查询案例——DLL数据访问层(HouseDLL.cs)

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Co...

ASP.NET数据访问层

  • 2014年03月12日 21:01
  • 3KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:实战 .Net 数据访问层 - 7
举报原因:
原因补充:

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