muhammad_97
@muhammad_97
PHP-разработчик

Где используется паттерн «Репозиторий»?

Добрый день. Уже много раз слышал про паттерн Репозиторий и какой он хороший, но так и не понял где его можно использовать. Не мог бы кто-нибудь привести пару примеров его использования?

P.S.: правильно ли я понял, что репозиторий это класс, которому передается объект и имя, под которым этот объект будет сохранен и с помощью этого имени объект впоследствии может быть получен?
  • Вопрос задан
  • 8245 просмотров
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Паттерн репозиторий используется для изоляции логики хранения данных. Например:

interface UserRepository {
    function getUser($id);
    function getUsersWhichSatisfyMyCustomBuisnessRulecs(BuisnessRules $rules);
    function saveUser(User $user);
}

class InMemoryUserRepository implements UserRepository {
    private $users = [];

    function getUser($id) {
         return isset($this->users[$id]) ? 
             $this->users[$id] : null;
    }

    function getUsersWhichSatisfyMyCustomBuisnessRulecs(BuisnessRules $rules) {
         return array_filter($this->users, function (User $user) use ($rules) {
               return $user->isSatisfyRule($rules->getSomeRule());
         }
    }
    function saveUser(User $user) {
        $this->users[$user->getId()] = $user;
    }
}


Что показывает данный пример:
- что репозиторий для приложения - это прежде всего интерфейс, имплементацию которого можно заменить в любой момент. Что позволяет нам менять хранилище для отдельных сущностей по желанию. Так же InMemoryRepository часто используют при юнит тестировании (хотя обычно это моки интерфейса).

- что нет жесткой привязки к реализации. Вы можете использовать внутри репозитория plain sql, data mapper, active record, ассоциативные массивы, файлы... ну вы поняли. Главное интерфейс заимплементить.

- репозиторий позволяет вам построить архитектуру приложения не связывая все с логикой хранения данных. Таким образом мы организуем слабую связанность системы и придерживаемся принципа единой ответственности.

martinfowler.com/eaaCatalog/repository.html
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@mr_ko
Javascript, Node.js. React.js, Vue.js, Wordpress
Вот вроди доступно расписано habrahabr.ru/post/248505
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы