Как бы я спроектировал хранилище для обработки нескольких стратегий доступа к данным?
Как будет выглядеть скелет для хранилища, способного поддерживать несколько уровней базы данных, используя 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 в ваши репозитории, чтобы они участвовали в одной и той же рабочей единице.
Я уже ответил, что дважды XD
один здесь
Шаблон репозитория с использованием linq
другой здесь
ControllerFactory, в которой контроллеры разделены в другом проекте