@Donald_Duck

Правильно ли я понимаю суть контрактов, сервис-провайдеров и фасадов в laravel?

Здравствуйте! Правильно ли я понимаю, что контракт это реализация функционала (одна или больше), а сервис-провайдеры и фасады это способы доступа к этому функционалу т.е. к контракту?
  • Вопрос задан
  • 915 просмотров
Решения вопроса 2
mashletov
@mashletov
Math.random()
контракт это реализация функционала

Наоборот, контракт = интерфейс. А у контракта может быть несколько реализаций.

сервис-провайдеры это способы доступа

Нет. Сервис провайдер только регистрирует функционал.
Доступ к сервису можно получить с помощью фасадов, инъекции зависимостей, через сервис-локатор app().

фасады это способы доступа

Это да. Фасад это и прокси и фасад в одном флаконе. Создан для удобства.
Ответ написан
Комментировать
SerafimArts
@SerafimArts
Senior Notepad Reader
Если так описывать, то программист - это менеджер компьютера, ставит ему таски и декомпозирует задачи...

Если грубо говоря - да. Если вдаваться в детали - нет (ну или слишком далеко от реальности).

В ларке контракты служат для описания инвариантности поведения и сигнатур сервиса (интерфейсы как бы этим и занимаются - орут во всю глотку, что ты забыл реализовать какой-то там метод при имплементации этого интерфейса. "Г - гениально"). Т.е. в нашем случае это просто тавтология, а названы они так для удобства, чтобы понимать, что имя является (а) локатором для доступа к сервису и (б) допустимым тайп-хинтингом в методах для инъекций реализаций. Параллели этих "контрактов" на DbC хоть и можно проводить, так как идеи схожие, но не стоит, т.к. всё же немного (сильно) подходы разные.

Сервис-провайды - это провайдеры сервисов. Ещё одно гениальное умозаключение. Переводим на русский и получаем "поставщик услуг". А если грубо говоря - регистратор этих самых злосчастных сервисов.

Фасад в нормальном мире - это хренотень, которая объединяет набор разных сервисов в одном месте. В мире ларки - это прокси, который используя сервис-локацию стучится в контейнер и перенаправляет все вызовы методов в этот самый сервис, который зареган в этом самом контейнере. В качестве локатора для сервиса вполне может выступать его интерфейс, ака "контракт".
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@by_better
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы