走进Linq-Linq to SQL源代码赏析之Provider的初始化
[2] 走进Linq-Linq to SQL源代码赏析之Provider的初始化
[3] 走进Linq-Linq to SQL源代码赏析之Provider的初始化
系列文章导航:
不能不说的C#特性-迭代器(下),yield以及流的延迟计算
走进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-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类,你可以看看初始化的过程,并联系上面的图想想如何构建一个可扩展的架构。