Я бы не согласился. Репозиторий, безусловно, является способом реализации шаблона клиент-сервер, в частности, на стороне сервера. Наличие сервера подразумевает существование клиента, по крайней мере, одного. Даже если где-то нет централизованной базы данных, все равно существует слой данных , который может быть локальным для клиента. Без некоторого вида уровня данных вы ограничены только приложениями в оперативной памяти: они вообще не имеют состояния (включая отсутствие пользовательских настроек, например). Я предполагаю, что ваш вопрос не ограничивается этими.
Идея, лежащая в основе шаблона хранилища, заключается в необходимости абстрагирования данных IO подробности реализации . Он скрывает определенную структуру базы данных, ее конфигурацию, отображение и (редко) логику проверки внутри соответствующего класса IRepository
. Обычно эти ребята являются общими, поэтому программисты имеют дело с IRepository<T>
с некоторыми дополнительными ограничениями, наложенными на T
. Следовательно, наличие такого интерфейса позволяет: 1) использовать концептуально разные базы данных одновременно, не давая остальному коду знать об их принципиальных различиях (представьте традиционный SQL вместе с базой данных на основе графов), 2) заменять разные базы данных без изменений, внесенных в внешний мир: скажем, вы решили избавиться от MSSQL
и перейти к Neo4j
или наоборот, 3) наконец, последнее, но не менее важное, вы получаете острый как бритва край определенной «ответственности» - данные IO. Это действует как удобная точка расширения для внедрения расширений, таких как проверка или ведение журнала.