Паттерн проектирования Фасад (Facade) на PHP

Паттерн проектирования Фасад (Facade) на PHPПаттерн проектирования Фасад (Facade) на PHP.

Перед прочтением ознакомьтесь с введением в паттерны проектирования на PHP. в котором описаны принятые соглашения и понятия. Данная статья дополняется с некоторой периодичностью, так что если вы ее читали ранее, не факт что данные не изменились.

Facade (Фасад) относиться к классу структурных паттернов. Представляет собой унифицированный интерфейс вместо набора интерфейсов некоторой подсистемы. Паттерн фасад определяет интерфейс более высокого уровня, который упрощает использование подсистем.

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

Это один из тех паттернов, у которого нет четкой реализации, так как она зависит от конкретной системы. В общем случае нам надо выполнить такое преобразование.

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

Ниже приведен набросок одной из реализаций.

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

Используйте этот паттерн, если вы хотите.

Предоставить простой интерфейс к сложной подсистеме.

Отделить систему от клиентов и от других систем.

Разделить подсистему на независимые слои (точка входа каждого слоя - фасад.

Повысить переносимость.

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

Добавить комментарий