看了这个贴子, 看来很多应用都要求同时支持多种数据库.
我采用Adapter Pattern和IOC的Dependency Injection Pattern做过这种设计, 施行过程大概是这样的,
不一上来就做框架, 先用其中一个provider做几个通用的test case, 比如用SQLClient调用Stored proc, query, insert.. 然后用Refactorting里的Extract Interface方法, 先做一个DBAdapter interface, 再做一个类SQLClientAdapter把test case里所有和 SQLClient相关的操作都提取出来, 做为DBAdapter和SQLClientAdapter的方法, 如果你的应用需要访问oracle, 再做一个OracleClientAdapter, 实现DBAdapter 的所有方法.
这样一来你的程序只需要用到DBAdapter interface, 然后用IOC的Dependency Injection Pattern方法创建 DBAdapter(可以用spring.net或pico.net), 这样你就可以通过修改配置文件来切换adapter了.
当然也可以用Factory Method Pattern的方法来配置Adapter, 不过始终需要修改code, IOC其实是对Factory Method Pattern的一种加强, 并且他还可以替换Singleton Pattern 和Prototype Pattern