Шаблоны проектирования для сценария с несколькими БД - PullRequest
4 голосов
/ 11 апреля 2011

Наше приложение .NET должно подключаться к 2 различным базам данных SQL. Некоторые запросы будут направлены в 1-ю БД, а некоторые во вторую. Существуют ли какие-то конкретные шаблоны проектирования для достижения этой цели. Есть ли DataAdapter, который может переключаться во время выполнения из одной БД в другую.

1 Ответ

6 голосов
/ 11 апреля 2011

Инкапсулируйте каждую базу данных в соответствии с Стратегией - когда речь идет о базах данных, мы часто называем их Хранилища .Теперь вы можете инкапсулировать обе реализации за 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, поэтому в соответствии с принципом замены Лискова *1013* они никогда не узнают разницу.

...