Laravel Controllers & Services - PullRequest
       17

Laravel Controllers & Services

0 голосов
/ 15 октября 2019

Я уже некоторое время кодирую проект, и из-за его сложности иногда я путаюсь с собственным подходом.

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

Контроллеры

Я определяю два вида "главных" контроллеров:

- Контроллер по умолчанию: расширяет базовый контроллер (контроллер маршрутизации от Подсветить ) и несет ответственность за отправку ответа без каких-либо знаний о данных / реализации.

- ДействиеКонтроллер : расширяет контроллер по умолчанию и несет ответственность за проверку входящего запроса без каких-либо знаний о правилах / сообщениях проверки.

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

С другой стороны, контроллер действия используется любым контроллером, который требует проверки. Например, действие пользователя магазина на БД.

Код можно проверить здесь.

Сервисы

Iсоздал абстрактный класс, чтобы помочь мне выполнять специализированные услуги. Сервис - это сочетание Контроллера и Моделей. Служба должна получать параметры или атрибуты, выполнять соответствующие методы в моделях и возвращать их.

Служба ничего не знает о запросе, поэтому контроллер должен «подготовить / нормализовать» данные перед отправкой их вservice.

Пример: сохранить пользователя в БД;обновить пользовательские настройки;отправить счет поставщику платежа;и т. д.

Этот подход помогает мне иметь очень узкие и небольшие сервисы, поэтому гораздо проще расширить / изменить реализацию без побочных эффектов. Кроме того, для тестирования это довольно просто!

Вы можете проверить код здесь.

Обсуждения

  1. Некоторыеконтроллеры требуют вызова нескольких служб. Например, когда пользователь отправляет запрос POST в / settings, вызывается 4 (четыре) сервиса, каждый со своей реализацией. Этот подход имеет какой-то смысл для вас?
  2. Несложные службы обычно выполняют только операции CRUD, например Get, Store, List, Destroy . Но некоторые сервисы требуют более сложных операций, а иногда это почти бизнес-процесс. Должен ли я создать еще один слой с именем Процессы для обработки этих случаев?
  3. Мои службы возвращают модель почти во всех случаях. Таким образом, я могу установить свой ответ в соответствии с запросом (если запрос JSON, возвращает только данные. Если запрос просмотра, возвращает нумерацию страниц). Это хорошая практика?
  4. В данный момент мои сервисы обрабатывают только свою реализацию модели. Но в некоторых конкретных случаях мои сервисы должны выполнять другие сервисы. Это тот случай, когда я должен вызывать выполнение процесса вместо службы? Мне действительно не нравится обрабатывать вызов мультисервисов на уровне контроллера.

Я ценю вашу помощьи надеюсь, что это может быть полезно для других разработчиков Laravel. Если что-то не ясно, дайте мне знать!

...