Паттерны на ruby: Прокси
Описание:
Данный паттерн оборачивает собой другой объект (не меняя его интерфейс), притворяясь “оригинальный” объектом. Перехватывая все вызовы к нему, реализует дополнительную скрытую логику.
Прокси может использоваться для логирования запросов к объекту; для кеширования данных; для проверки доступа к объекту и прочих задач.
Пример задачи:
Представим что у нас есть рабочее rails приложение. В котором для пользователей есть функционал комментирования.
Необходимо добавить автоматическую блокировку комментариев содержащих спам.
Реализация:
Комментарии представлены моделью <Comment> в котором текст комментария находиться в атрибуте .message.
Функционал проверка на спам реализовать в модуле SpamFilter. У него есть метод .is_spam? который на вход принимает строку и возвращает true или false.
Сам прокси представлен в виде класса <CommentAntiSpamProxy> который оборачивает собой экземпляр класса <Comment>.
Прокси реализован таким образом что он запускает функционал проверки комментария на спам после того как был удачно вызван метод .save или .update_attributes.
Благодаря чему в контроллере CommentsController достаточно обернуть созданный экземпляр класса <Comment> в <CommentAntiSpamProxy> и дальше работать с ним как с обычным комментарием.