Ответ 1
Тот факт, что они оба являются интерфейсами, не делает их более похожими, чем если бы у нас было два класса.
Контракты обычно являются термином, используемым для обозначения интерфейсов, которые обеспечивают строгую границу между некоторыми функциями вашего кода и вызывающим абонентом/клиентами. Контракт - это способ обеспечения последовательного интерфейса с функциональностью. Как правило, после того, как вы определили контракт, его не следует изменять. Это означает, что вы можете реализовать интерфейс в любом случае (или даже менять различные реализации), но клиенты всегда будут использовать одни и те же методы интерфейса. Изменение реализации не повлияет на код клиента. В основе классифицированных непосредственно влияют определения контрактов.
Фасад с другой стороны - способ упрощения некоторых функций кода для клиента. Я думаю, что многие ларавельные фасады (такие как "Маршрут и запрос" ) на самом деле сопоставляются с множеством разных классов/интерфейсов. Это избавляет вас от необходимости запоминать, какой из классов выполняет задание: просто вызовите фасад и дайте ему обработать его.
Шаблон проектирования фасадов часто используется, когда система очень сложна или сложна для понимания, потому что система имеет большое количество взаимозависимых классов или ее исходный код недоступен. Этот шаблон скрывает сложности более крупной системы и обеспечивает более простой интерфейс для клиента. wikipedia
Пока я думаю, что laravel использует интерфейсы с его фасадами, интерфейсы не определяют базовые классы. На самом деле, вполне вероятно, что если подписи подклассов классов классов изменились, вы, вероятно, перепишете фасад, чтобы быть похожим. Фасад заключается не в том, чтобы сделать строгий контракт, а в том, чтобы сделать вещи проще.
UPDATE Как вы правильно определили в своем комментарии, Laravel Facades имеют статические методы. Вы можете легко называть их в своем коде, не вводя их (хотя с точки зрения теста это ужасная идея). Тот факт, что Laravel Facades является статическим, является выбором реализации Laravel (восходит к L3, где все классы laravel были статическими), это не имеет никакого отношения к строгому определению Фасадов.
Возможно, ответ на ваш вопрос таков: Фасады - это наследие от L3. Есть много сообщений в блоге для использования и использования Laravel статических классов. Я думаю, что в конце концов команда разработчиков laravel решила предложить оба варианта.
Несмотря на то, что я представил точное определение контрактов и фасадов выше, возможно, в Laravel простое отличие состоит в том, что фасады являются статическими классами, а контракты реализуются классами экземпляров. Тогда это все радует.
Из документов Laravel
Laravel "фасады" служат в качестве "статических прокси" для базовых классов в контейнере службы, обеспечивая преимущество кратковременного выразительного синтаксиса, сохраняя при этом большую тестируемость и гибкость, чем традиционные статические методы.