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

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

作者: 横刀天笑  来源: 博客园  发布时间: 2008-09-24 12:03  阅读: 6779 次  推荐: 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


IProvder的初始化方法Initialize需要两个参数,其中一个就是一个IDataService接口(注意,这里是接口,那肯定有很多实现,不过由于Linq to SQL就支持一种数据库,现在也只有一种实现了,不过我们可以通过这种形式来想象和扩展,并可以学习这种理念),这个时候我们得到的是另外一种类图:

这里以组合的方式,组合Provider和IDataService,类的继承层次简明了很多,也可以很容易处理子类之间的重复了。

实际上这就是桥接模式,该模式的意图是抽象和实现相分离,在这里IProvider就是抽象,而IDataService这边就是实现了。通过IDataService这个接口,把SqlProvider和CommonDataService,DBProvider和DBDataService之间的依赖消除了。仔细体会一下,我们的实际项目中在哪些地方出现过这样的场景?不久以前我发了一篇博客《重构到Brdge模式》,那里描述了我实际项目中一个真实的场景。

请注意的是,实际的Linq to SQL因为只支持SQL Server,所以上面的类图描述的关系并不存在,但是我们从代码中完全可以想象的到即使要扩展也是很容易的,这就是架构的力量,即使是昨天的设计也能应付明天的变化。

关于Provider的初始化就介绍到这里了,在文章末尾的源代码下载里提供了IProvider类和SqlProvider类,你可以看看初始化的过程,并联系上面的图想想如何构建一个可扩展的架构。


Linq to SQL源代码下载,注意不是完整源代码,不能通过编译,我会逐渐增加源代码

0
0

数据库热门文章

    数据库最新文章

      最新新闻

        热门新闻