多个DB场景的设计模式

时间:2011-04-11 07:28:29

标签: design-patterns

我们的.NET应用程序需要连接到2个不同的SQL数据库。一些查询将路由到第一个DB,一些查询将路由到第二个DB。是否有任何特定的设计模式来实现这一目标。是否有任何DataAdapter可以在运行时从一个DB切换到另一个DB。

1 个答案:

答案 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,他们永远不会知道差异。