У меня есть четкое представление о том, какой шаблон репозитория и его важность с точки зрения TDD. Я также понимаю, насколько легко можно переключать базовое хранилище данных для приложения, поскольку репозиторий действует как окно для логики доступа к данным.Как использовать два хранилища данных для одного и того же интерфейса в шаблоне репозитория?
Что я НЕ получаю, так это то, как поддерживать несколько хранилищ данных одновременно. Вот пример, предположим, что я определил репозиторий IPersonRepository, который имеет две реализации, и требование - читать XML-файл и хранить его в базе данных SQL или наоборот.
DataAccessLayer
public interface IPersonRepository
{
Person GetPersonById(int id);
}
public class PersonRepositorySQL : IPersonRepository
{
public Person GetPersonById(int id)
{
// get person from sql db (using ado.net)
}
}
public class PersonRepositoryXML : IPersonRepository
{
public Person GetPersonById(int id)
{
// get person from xml file
}
}
BusinessLogicLayer
public PersonService
{
private IPersonRepository personRepository;
public PersonService(IPersonRepository personRepository)
{
this.personRepository = personRepository;
}
public Person GetPersonById(int id)
{
personRepository.GetPersonById(id);
}
}
Вопросы (упорядоченные по важности):
- это означает, что я должен создать экземпляр два PersonService объекты ли каждый раз для чтения данных из db и xml путем передачи PersonRepositorySQL и PersonRepositoryXML соответственно?
- Чтобы сделать выше, я должен добавить ссылку на репозитории на верхнем уровне (в основном презентация)? Как этого можно избежать?
- Является ли DAL хорошим местом для хранения репозиториев?
- Можно ли назвать класс BLL службой ex: PersonService?
Я понимаю, что сообщение стало очень длинным, но я хотел поставить все, что вызывает путаницу.
- Н.В.