构建可以使用“插件”数据访问层的.Net Web应用程序的准则

时间:2011-04-12 12:56:16

标签: .net sql-server-2008 web-applications architecture

我正在构建一个最初将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获取/处理数据所需的任何操作。

1 个答案:

答案 0 :(得分:2)

你应该看看做的是使用为你抽象数据库的ORM工具(nHibernate),或者定义一组代表你的DAL的接口,然后使用IoC实现(Ninject,Castle等)来交换只要它实现了接口,就可以随意执行底层实现。

然而,设计一个面向未来的界面(即,可以应对与其他数据库一起工作的微妙怪癖)并不简单,因此您最终可能需要进行更改。

我按以下顺序做两件事之一:

  1. 检查确实是否需要换出数据库。
  2. 沿着ORM工具路线前进,为您完成了大量的工作。
  3. 抽象数据库的一个很好的例子,不一定是DAL本身就是Microsoft的企业库数据访问应用程序块。