Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 21.05.2020 10:47:08

Организация кода DI, IoC, Intarface

Добрый день!
Есть несколько методов send() для отправки email каждый из которых реализует функционал отдельного шлюза отправки.
После рефракторинга решил, что правильнее было бы для каждого шлюза создать свою реализацию в классе, наследуемую от общего интерфейса, так как методы там одни и те же (send(), getStatuses(), getBalance()).
Из идей самая первая была: создать Contract под каждый шлюз имплеминтировать Helper и каждый Helper зарегистрировать через Service Provider как require_once Helper.php И вызывать каждый из Helperov когда нужно. Выглядит криво, так как правильнее было бы внедрить не конкретный класс а интерфейс.
Поэтому я подумал, а что если все сделать также но вызывать не хелперы а сделать маппинг через массив, где мы делаем [mail.ru => MailRuHelper::class, ...]
Соответственно в сервис мы делаем инъекцию интерфейса а внизу уже по маппингу находим нужную реализацию.
Интересует то, как правильно это реализовать.
Еще я читал про Контекстная привязка где разные реализации для разных контроллеров. А есть что то похожее для одного контроллера?

Не в сети

Подвал раздела