Найти в Дзене
ZDG

Шаблоны проектирования: Фасад

Оглавление

Предыдущие части: ПабСаб, Наблюдатель, Визитёр, Фабрика, Синглтон, Стратегия, MVC, Вступление

Есть целая группа шаблонов, похожих друг на друга почти до неразличимости. Мы попробуем разобраться с этой группой и выяснить, что к чему, и почему их так много. И начнём с Фасада.

Facade

Здесь всё просто – шаблон называется Фасад и делает именно то, что делает фасад – предоставляет красивый интерфейс для доступа к страшному функционалу.

Bait by Rawls. https://art.alphacoders.com/arts/view/6189
Bait by Rawls. https://art.alphacoders.com/arts/view/6189

Какая задача решается

В некоторых случаях вы можете столкнуться с плохо написанным легаси-кодом. Этот код требуется расширить новым функционалом, который дальше тоже будет расширяться. Но переписывать его с нуля или проводить рефакторинг будет слишком затратно, поэтому мы поступаем так:

Собираем методы этого кода и прячем их за интерфейсом, который уже принадлежит новому функционалу и который можно в дальнейшем расширять.

Всю старую помойку мы прячем за новым и чистеньким фасадом, работать с которым существенно проще (если не проще, то это уже не фасад).

В других случаях это может быть некая сложная система. Скажем, она состоит из памяти, жесткого диска, базы данных и т.д. И чтобы получить из неё какую-то нужную информацию, нужно прочитать файл, сделать какие-то действия в памяти, обратиться к базе, послать запрос в интернет и т.д.

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

Также есть случаи, когда требуется интегрировать вместе несколько служб. Например, шлюзы платёжных систем: Киви, Сбер, Яндекс и т.д. В каждом шлюзе есть своё API.

Или другой вариант: нужно интегрировать в свою программу внешнюю библиотеку, исходного кода которой у вас нет.

Всё это тоже можно спрятать за фасадом, который будет иметь универсальный метод для отправки платежа или для обращения к библиотеке.

Практическая реализация

Здесь собственно не о чем говорить. Шаблон реально простой и не имеет подводных камней. Вы просто делаете класс с нужными вам методами, а в этих методах реализуете работу со сложным или устаревшим функционалом, который вам надо спрятать.

И фасад становится единственной точкой соприкосновения со спрятанным кодом. Используя его, вы можете быть уверены, что программа нигде больше не зависит от спрятанного кода.

Главное – не написать потом ещё один фасад для старого фасада :)

-2

Читайте дальше: