Реализует ли фасад в Laravel шаблон фасада или прокси?

Как я понял, цель фасада -

чтобы предоставить единый интерфейс для набора интерфейсов в подсистеме. Фасад определяет интерфейс более высокого уровня, который упрощает использование подсистемы. Это можно использовать для упрощения ряда сложных взаимодействий с объектами в едином интерфейсе.

введите описание изображения здесь

Насколько я понял, цель шаблона - скрыть сложность в подсистеме (например, класс фасада вызывает много объектов в подсистеме).

Но в Laravel Facade только один класс вызывает другой класс (а не подсистему). Для меня это больше похоже на Proxy больше, чем на Facade. Может кто-нибудь поможет мне это прояснить.


person Rezigned    schedule 26.06.2013    source источник


Ответы (1)


В книге Руководство архитектора по шаблонам проектирования PHP отмечается, что

Цель Фасада - представить более простой интерфейс для всей подсистемы, состоящей из множества объектов.

Насколько я понимаю, шаблоны проектирования - это не «априорное» обязательство, а скорее обязательство по реализации общего многоразового решения часто встречающейся проблемы.

Laravel 4 использует шаблон проектирования фасадов, который позволяет ему предоставлять выразительный синтаксис через статический API, но при этом сохранять его тестируемым под капотом. Фасад скрывает сложность / реализацию кода. Действительно, фасады Laravel реализуют один объект. Мы не должны пренебрегать тем, что Laravel App Facade (контейнер IoC) инкапсулирует все приложение.

Шаблон прокси перехватывает запрос и выполняет дополнительную работу, например: фильтрация, ACL, преобразование ... Объект «потребитель» в блаженном неведении о той дополнительной работе, которую выполняет уровень прокси.

person JohnD    schedule 25.10.2013