我正在构建一个最初将SQLServer 2008用作DBMS的应用程序。我应该如何构建我的应用程序,以便在稍后阶段我可以使用不同的DBMS,例如Oracle,无需更改我的代码,即仅通过配置。
我怀疑我的核心应用程序将调用程序集/层中的代码,该代码封装应用程序运行所需的所有数据库调用。然后,该层将调用DBMS特定的层(基于配置)来进行实际的DB调用?有人能指出我这个明显的例子吗?
谢谢!
在下面添加了一个解释:
我的想法是我可以有多个组件,例如MyApp,MyApp.Database,MyApp.Database.SQLServer,MyApp.Database.Oracle等。
MyApp会拨打电话:
DataSet ds = MyApp.Database.GetSomeData();
...看起来像......
public DataSet MyApp.Database.GetSomeData()
{
return GetDataFromDBMS();
}
GetSomeData是一个通用调用,即MyApp需要“GetSomeData()”才能执行某些操作。它并不关心数据的来源。
然后,GetDataFromDBMS将通过配置文件知道调用MyApp.Database.SQLServer.GetTheData()或MyApp.Database.Oracle.GetTheData()。这些方法可以执行从每个DBMS获取/处理数据所需的任何操作。
答案 0 :(得分:2)
你应该看看做的是使用为你抽象数据库的ORM工具(nHibernate),或者定义一组代表你的DAL的接口,然后使用IoC实现(Ninject,Castle等)来交换只要它实现了接口,就可以随意执行底层实现。
然而,设计一个面向未来的界面(即,可以应对与其他数据库一起工作的微妙怪癖)并不简单,因此您最终可能需要进行更改。
我按以下顺序做两件事之一:
抽象数据库的一个很好的例子,不一定是DAL本身就是Microsoft的企业库数据访问应用程序块。