您的位置:知识库 » 数据库

走进Linq-Linq to SQL源代码赏析之Provider的初始化

作者: 横刀天笑  来源: 博客园  发布时间: 2008-09-24 12:03  阅读: 6783 次  推荐: 0   原文链接   [收藏]  

系列文章导航:

走进Linq--Linq横空出世篇

走进Linq-辉煌的背后

走进Linq-Linq大观园

不能不说的C#特性-对象集合初始化器

不能不说的C#特性-匿名类型与隐式类型局部变量

不能不说的C#特性-扩展方法

不能不说的C#特性-匿名方法和Lambda表达式

不能不说的C#特性-迭代器(上)及一些研究过程中的副产品

不能不说的C#特性-迭代器(下),yield以及流的延迟计算

走进Linq-Linq to Objects(上)基础篇

走进Linq-Linq to Objects(下)实例篇

走进Linq-Linq to SQL感性认识篇

走进Linq-Linq to SQL How do I(1)

走进Linq-Linq to SQL How do I(2)

走进Linq-Linq to SQL How do I(3)

走进Linq-How do I(4)拾遗补零篇第一节

走进Linq-Linq to SQL源代码赏析 Table的获取过程

走进Linq-Linq to SQL源代码赏析之Provider的初始化

走进Linq-Linq to SQL源代码赏析,通过Linq to SQL看Linq


关于设计模式的旁白

桥接模式

看到这里也许大家都说,哦,原来实际的事情都是这个IProvider干的啊,IProvide是个接口,下面可能有SqlProvider,OracleProvider,AccessProvider,只要提供这些Provider我们就可以无限扩展数据库了。是的,设计到这一步已经可以满足多数据库的要求了,但是数据库种类的多样性只是一个方面,还有每种数据库版本的差异呢?如果我们就使用继承,就这样无限的去扩展,最后会得到一个很复杂的类层次,层次搞复杂后不仅仅难于重构,更要的是会出现很多重复,灵活性也降低了。

如果光使用继承,我们可能会得到这样的继承树:

这样的继承层次看起来貌似很“专业”,但是灵活性实在是不敢恭维,首先,任何一个层次的小小变动在整个继承链上都要改动,如果增加一种数据库,而这种数据有会有几种版本,各个版本之间又有些差异,那么类的数量会成倍增长。还有一个,那就是子类之间有可能造成重复,假如Sql2000Provider和Oracle9iProvider之间有重复怎么办?C#又不支持多继承,我们无法使用Martin Folwer的重构方法将子类重复的部分提升到父类。那有什么好办法呢?看看微软的设计师是怎么干的。

0
0
 

数据库热门文章

    数据库最新文章

      最新新闻

        热门新闻