Рефакторинг аппликационных слоев Laravel - PullRequest
0 голосов
/ 27 марта 2020

Мой Laravel проект начинает расти, и я начинаю заниматься жирными контроллерами и моделями. Вероятно, я за пределами пути SOLID принципов, и мой код не DRY.

Я решил реорганизовать свои логи слоев c, чтобы следовать больше SOLID и попытаться быть больше DRY. После некоторых исследований по inte rnet я пришел к следующему выводу:

enter image description here

Позвольте мне объяснить эту диаграмму:

  1. Сначала мы начнем с представления, в котором пользователь выполняет какое-то действие, и запрос отправляется контроллеру.
  2. Ответственность контроллера заключается в обработке запроса и предоставлении ответа пользователю. Он сможет вызывать 3 разных слоя (синие цифры):
    • Сервис : для обработки бизнес-логики c, таких как вычисления, специальные действия и т. Д. c.
    • Репозиторий : где будут размещены все логи запросов c. Например, если в методе index мы хотим вернуть список пользователей с пользователями, которые имеют более 100 сообщений и упорядочены по имени (пример 1).
    • Laravel Resource (Transformers) : с обязанностью преобразовать модель в JSON. Когда мы меняем нашу таблицу, нам не нужно менять все представления и контроллеры или модели, затронутые этим изменением. Все будет сделано в одном месте.

Пример 1:

 # UserController.php
 public function index()
 {
     $users = new UserCollection($this->UserRep->usersWithPost());
     return view('user-list', compact('users'));
 }

 # UserRepository.php
 public function usersWithPost($min = 100)
 {
     return $this->model->where('post_count', '>=', $min)->orderBy('name');
 }

 # UserResource.php
 public function toArray($request)
 {
     return [
         'id' => $this->id,
         'name' => $this->name,
         'email' => $this->email,
         'post_count' => $this->post_count,
         'created_at' => $this->created_at,
         'updated_at' => $this->updated_at,
     ];
 }

Сервисные вызовы (зеленые номера):
  • Он может вызвать репозиторий, если ему нужны какие-либо данные из моей модели для выполнения какого-либо действия.
  • Он также может вызвать Laravel Ресурс "Трансформеры" если были обращения к хранилищу.
В хранилище будет использоваться красноречивая модель для сохранения запроса в моем хранилище данных (MySQL).

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

Как вы думаете, это имеет смысл, и это хорошая практика?

Я хотел бы подчеркнуть, что я не буду переключаться между ORM. Я буду использовать eloquent с MySQL в качестве хранилища данных, поэтому я планирую поместить все свои запросы в репозитории, чтобы иметь другой слой для запросов logi c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...