Andriy Shyrokoryadov

.Net developer, data scientist

Прокси. Шаблоны проектирования - видео №10. №67.

Текст к видео "#67 Прокси" на канале YouTube

Привет всём.

В предыдущих 2 видео по причинческим технинам были проблемы со звуком. Это и не удивительно – я пользовался микрофоном стоимостью 10 долларов в течении года. Качество звука было таким каким было – не очень хорошим, но и не ужасным. Однако неделю назад микрофон меня подвел. Как вы видите у меня новое оборудование. Посмотрим как 100 долларовый микрофон справится со своим заданием.

В этом видео мы поговорим о шаблоне проектирования «Прокси» или «Посредник». На самом деле если вы давно подписаны на мой канал, то скорей всего вы уже с этим шаблоном встречались. Прежде чем будет представлено объяснение, поставьте видео на паузу и попытайтесь вспомнить всё, что вы знаете на тему шаблона «Декоратор» и связующих программных компонентов в приложениях ASP.Net Core. По моему мнению в связующих программных компонентах был использован именно этот шаблон или по крайне мере шаблон «Прокси» послужил вдохновением для создателей концепции связующих программных компонентов. А что касается шаблона «Декоратор», то шаблон «Прокси» очень похож на «Декоратор».

Итак, сценарий использования шаблона «Прокси». У вас есть некоторый класс, который выполняет определенную работу, однако прежде чем обратится к данному классу и вызвать определенный, так называемый рабочий метод, Вы должны выполнить определенную предварительную логику и только лишь затем вызвать рабочий метод. Звучит загадочно… Однако примеры использования нам помогут. Конкретно в сегодняшнем видео у нас будет класс-репозиторий с возможностью выполнения всех операция на объекте «Адрес». То есть такой обычный репозиторий адресов. Однако прежде чем выполнить одну из операций в репозитории адресов, мы должны сделать валидацию объекта адреса, например проверить заполнены ли всё обязательные свойства объекта адреса. Сам класс репозитория такую задачу не выполняет, так как мы строго придерживаемся принципа единственной ответственности – класс-репозиторий отвечает только лишь за запись и чтение объектов адресов в определённом хранилище. Значит логика валидации должна быть в другом классе и этот класс мы назовем классом – прокси к нашему рабочему классу – классу репозитория.

Валидация это не единственный сценарий использования шаблона прокси. Еще одним сценарием использования может быть контроль доступа к объекту определенного класса. Что если текущий пользователь не имеет права читать или сохранять адреса в репозитории? Мы должны это проверить. Такая проверка также будет вынесена в отдельный класс и этот класс будет классом посредником в доступе к рабочему классу – классу репозитория.

В практическом примере будут использованы 2 вышеупомянутые класса – посредника: контроль правильность объекта и контроль доступа к классу репозитория. А также будет использован класс репозитория для доступа для которого необходимы будут посредники.

Теперь давайте посмотрим на схему шаблона «Прокси», а также на архитектуру приложения-примера.

alt text

alt text

Вы можете сказать, что класс «Декоратор» выполняют ту же самую функцию. Да, на первый взгляд это так, однако есть некоторые различия. Давайте посмотрим на таблицу, которую я подготовил, и уясним различия.

alt text

Теперь когда мы знакомы с архитектурой шаблона «Прокси», архитектурой практического примера и отличиями шаблона «Прокси» от «Декоратора», давайте запустим практический пример и посмотрим как это все вместе работает.

ПРАКТИЧЕСКИЙ ПРИМЕР.

По вопросу шаблона проектирования «Прокси» мне нечего больше добавить. Надеюсь, что моё объяснение было доступным и понятным; надеюсь, что новый микрофон меня не подвел. Мне кажется, что шаблон «Прокси» это важный шаблон, которому уделяется мало внимания. Почему он важен? Потому, что я видел использование этого шаблона в серьезных фреймворках, например в связующих программных компонента, которые используют принципы работы данного шаблона. Программные компоненты это прокси, а рабочим объектом является контроллер. Также я видел примеры использования данного шаблона в качестве валидатор, а с валидацией мы имеем дело довольно часто. В любом случае, если данное видео было хоть чуточку вам полезно, я буду благодарен за лайк, подписку, комментарий, с особым акцентом на слово комментарий. Просто напишите любую фразу в комментариях связанную с шаблонами проектирования. Больше комментариев – лучшее позиционирование видео, что ведет к продвижению каналу. Спасибо за внимание.

Пример кода из видео на GitHub

Для открытия файла проекта необходимо Visual Studio 2019.