我们的.NET应用程序需要连接到2个不同的SQL数据库。一些查询将路由到第一个DB,一些查询将路由到第二个DB。是否有任何特定的设计模式来实现这一目标。是否有任何DataAdapter可以在运行时从一个DB切换到另一个DB。
答案 0 :(得分:6)
将每个数据库封装在Strategy后面 - 当涉及到我们经常称之为Repositories的数据库时。您现在可以将两个实现封装在路由请求的Composite之后。
想象一下,我们有一个IRepository接口。您可以像这样路由它们:
public class RoutingRepository : IRepository
{
private readonly IRepository repository1;
private readonly IRepository repository2;
public RoutingRepository(IRepository repository1, IRepository repository2)
{
if (repository1 == null)
{
throw new ArgumentNullException("repository1");
}
if (repository2 == null)
{
throw new ArgumentNullException("repository2");
}
this.repository1 = repository1;
this.repository2 = repository2;
}
public SomeEntity SelectEntity(int id)
{
if (this.UseRepository1())
{
return this.repository1.SelectEntity(id);
}
else
{
return this.repository2.SelectEntity(id);
}
}
// more IRepository members can go here...
private bool UseRepository1()
{
// implement routing logic here...
}
}
客户端只会看到IRepository接口,因此根据Liskov Substitution Principle,他们永远不会知道差异。