Как бы я спроектировал хранилище для обработки нескольких стратегий доступа к данным?

Как будет выглядеть скелет для хранилища, способного поддерживать несколько уровней базы данных, используя ASP.NET MVC и C#? Я хочу посмотреть, как будет выглядеть дизайн, если я буду поддерживать LINQ to SQL и NHibernate. Как бы я создал свой объект базы данных и вызвал для него метод в моем слое BLL?

2 ответа

Шаблон репозитория, вероятно, является лучшим решением для этого. Вы должны определить интерфейс для каждого репозитория, а затем создать конкретные репозитории для реализаций Linq2Sql и NHibernate, например

public interface ICustomerRepository
{
    Customer GetCustomer(int id);
}

public class NhibCustomerRepository : ICustomerRepository
{
    public Customer GetCustomer(int id)
    {
        // NHibernate implementation
    }
}

public class LtsCustomerRepository : ICustomerRepository
{
    public Customer GetCustomer(int id)
    {
        // Linq2Sql implementation
    }
}

Среда внедрения зависимостей, такая как Ninject, упрощает динамическое переключение между реализациями. Возможно, вам придется сделать дополнительную инъекцию зависимостей с NHibernate, чтобы передать текущую ISession в ваши репозитории, чтобы они участвовали в одной и той же рабочей единице.

Другие вопросы по тегам