Внедрение зависимостей для сложных задач

В последние несколько недель я много читал о внедрении зависимостей, инверсии, методах, IoC и т. Д. И т. Д. Хотя я понимаю, что до сих пор не могу получить некоторые вещи.

Допустим, у нас есть контроллер, который должен подписаться на какую-то услугу. Нам нужно следующее:

  1. Подтвердить запрос (месяц, год, план)
  2. Добавить подписку в базу данных
  3. Добавить счет-фактуру в базу данных (информация об оплате)
  4. Обновите пользователя, чтобы указать, что он подписан
  5. Обработать платеж
  6. Отображение информации для пользователя и перенаправление на страницу успеха

Это сложная задача, и если мы будем следовать Skinny Controller и Fat Model, это будет сложно. Многие разработчики также утверждают, что если у вас более 4 зависимостей, вы должны упростить свои классы и следовать одному принципу ответственности. Это приносит мне много вопросов.

  • Как мне поступить здесь?
  • Как изолировать контроллер?
  • Как мне сделать все это тестируемым?
  • Как передать все зависимости от контроллера / классов?

0

Решение

Вы можете сделать свою работу намного проще, используя Laracasts / Commander, основанный на командах.

Также оформить заказ Джеффри Уэй Командир (https://laracasts.com/search?q=commander&д-где = уроки).

Ваш контроллер будет выглядеть так:

  1. Получить ввод
  2. Валидатор звонков
  3. Вызов $this->execute(New SubscribeUserCommand($email, $data1, $data2)) который вызывает метод дескриптора SubsribeUserCommandHandler. Команда — это простой объект данных, содержащий все, что нужно методу-методу.
  4. Внутри обработчика команд вызовите любые другие команды для обработки вашего запроса
  5. Посмотрите на результат вашего обработчика команд и отобразите необходимые данные для пользователя.

Commander также настоятельно рекомендует вам работать с событиями для запуска электронной почты или уведомлений …

UPS:

  • Несколько зависимостей в вашем контроллере,
  • Читаемый контроллер
  • Протестируйте каждую команду отдельно

Вниз:
— Больше классов и предложений, необходимых для его настройки

Надеюсь, это поможет или, по крайней мере, даст вам представление о том, как решить вашу проблему. Я использую этот метод в моем проекте, где пользователи регистрируются, получают приветственные письма, роли … мой контроллер имеет длину около 5 строк, остальное находится внутри команд и обработчиков команд

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]