帮我构建一个封装我的数据库(也许是DI / IoC?)

时间:2009-10-20 02:08:10

标签: architecture dependency-injection inversion-of-control

我正在构建一个Windows表单应用程序,它根据3个不同的数据库进行一些分析。其中两个实际上是地理数据库(ESRI),另一个是标准CRUD类型的信息库。我们分别称它们为GeoRefDatabase,GeoResultDatabase和RulesDatabase。将需要访问所有3个数据库的不同类型的分析类(最多可能多达10个)。

  • GeoRefDatabase是集中式的,永不移动。它需要一个连接字符串。
  • GeoResultDatabase是存储分析输出的地方。它是“连接字符串”,物理位置可能在运行时变化(每次调用分析时)。结果是会有多个这样的实例。
  • RulesDatabase是集中式的,永不移动。它需要一个连接字符串。

例如,我希望能够调用类似的内容:

 var dbRef = GetDbRef();
 var dbRules = GetDbRules();
 var dbResult = GetDbResult( myLocation );

 var z = AnalysisTypeA( dbRef, dbResult, dbRules );

现在问题.....

  1. 如何封装这些数据库?我已经熟悉了IoC / DI,并且倾向于这一点,但我不确定最佳方法应该是什么。
  2. 存储连接字符串和类似信息的最佳方法是什么? App.confg?

1 个答案:

答案 0 :(得分:0)

对于没有移动的两个数据库,它可能是DI的候选者,因为它不会经常移动,但在某些时候可能。

如何在运行时确定要转到哪个其他数据库?

如果您提前知道连接字符串,然后将它们放入一个字符串数组中,然后将其注入,那么您可以选择要使用的数组中的三个或四个连接字符串中的哪一个。您可能希望有两个数组,一个是连接字符串,另一个是数据库的名称,因此您可以将它们放入哈希映射。

将这些放入App.config可能是一个候选人,至少根据我的经验。