Меня смутило то, что я читал во время моих исследований по шаблону репозитория. Мне интересно, если люди (неправильно?) Используют это слово, когда они просто означают уровень доступа к данным.
Поскольку "репозиторий" не найден в индексе шаблонов проектирования (GoF), я обратился к шаблонам архитектуры корпоративных приложений (Fowler). Фаулер кажется довольно ясным (стр. 323), когда он утверждает, что клиенты создают объект критериев и передают его в репозиторий для получения результатов. Это выглядит примерно так:
public class Person
{
public List<Person> Dependents()
{
Repository repository = Registry.personRepository();
Criteria criteria = new Criteria();
criteria.equal(Person.BENEFACTOR, this);
return repository.matching(criteria);
}
}
Является ли объект критериев тем, что делает репозиторий хранилищем? Если нет, что делать? Если абстрагирование механизма персистентности (и, следовательно, построение запросов) является целью, каким образом репозиторий отличается от вызова DAL/ORM simpe следующим образом:
public class PersonLogic
{
public List<Person> GetDependents()
{
IPersonData personData = DependencyContainer.Resolve<IPersonData>();
return personData.GetDependents();
}
}
Для меня разница выглядит так:
* С шаблоном репозитория клиент строит различные объекты критериев и вызывает на нем метод Matching().
* С помощью простого DAL клиенты просто называют разные методы на основе того, что они хотят.
Есть ли еще больше, чем это? Ошибочно ли программисты используют термин "репозиторий", когда они действительно означают DAL?
ИЗМЕНИТЬ
Дэвид Осборн отправил эту ссылку в Шаблоны сохранения. В нем указано:
В принципе, шаблон репозитория просто означает, что над фасадом вашей системы настойчивости, чтобы вы могли защитить остальную часть своего код приложения от необходимости знать, как работает настойчивость.
Это действительно тот уровень доступа к данным. Мне кажется, что репозиторий и DAL - это одно и то же, и, возможно, "истинный" репозиторий использует объект критериев.