Мой Laravel проект начинает расти, и я начинаю заниматься жирными контроллерами и моделями. Вероятно, я за пределами пути SOLID принципов, и мой код не DRY.
Я решил реорганизовать свои логи слоев c, чтобы следовать больше SOLID и попытаться быть больше DRY. После некоторых исследований по inte rnet я пришел к следующему выводу:
Позвольте мне объяснить эту диаграмму:
- Сначала мы начнем с представления, в котором пользователь выполняет какое-то действие, и запрос отправляется контроллеру.
- Ответственность контроллера заключается в обработке запроса и предоставлении ответа пользователю. Он сможет вызывать 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.