-
Notifications
You must be signed in to change notification settings - Fork 225
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Почему считается, что модели eloquent имеют минимум две ответсвенности? #5
Comments
Привет, Антон. |
Вопрос в том, что нарушается SRP? Я не вижу тут беспокойств. Причина внесения изменений в Eloquent одна - может поменяться что-то в базе данных. Со связностью (cohesion) всё впорядке, все методы сконцентрированы одной цели - работа с данными из базы данных. А вот если бизнес логика начинает появляться в Eloquent - вот тогда плохо... |
Евгений, я говорил ещё и о выборках из базы и методах сохранения/удаления. Все эти Soft delete, скоупы люди часто суют в классы моделей. И если скоупы ещё можно как-то отдельно держать (хотя это и не модно), то глобальные скоупы, такие как софт делит - не получится. Это немного другая логика, чем представление строки из бд. |
@githubjeka Много раз видел как используют подход "Тонкие Контроллеры -> Толстые Модели". Скоупы получения данных где уже вшита бизнес логика, с (например) той же фильтрацией по типу пользовательского аккаунта (простой/премиум). Так что в реальных проектах, тезис
И причиной изменения моделей становится банальное изменение бизнес логики. Приведу пример с скоупом. $users = User::onlyActive()->get(); И тут уже зарыта собака, ведь сегодня только активные пользователи это те у кого Удобно же правда, вроде KISS а вроде уже смешивание слоев, и в будущем, лично я, побоюсь добавить или изменить этот скоуп, ведь потому что PHPStorm и магия Laravel не дает мне интуитивно найти места где используется этот метод. $user = new App\Models\User;
return $user->onlyActivated()->get(); # Файл App\Models\User.php
//...
public function scopeOnlyActive($builder) {
return $builder->whereNotNull('email_verified_at');
}
public function scopeOnlyActivated($builder){
return $builder->onlyActive();
} пы. сы. В определённых кругах, за то что в Laravel используется Active Record и Model - архитекторы настаивают на замене его на Doctrine :) |
В вашем примере "собака зарыта" не в Active Record , а в том, что нет единого АPI получения активных пользователей. |
Вы правы, собака зарыта в разработчиках которые так пишут как у меня в примере. С одной стороны они то правы, любой обучающий ресурс им так диктует. Я просто хотел своим сообщением вам показать что утверждение
И я согласен с вами, я бы тоже хотел изменять модель в соотвествии только с изменениями в схеме. |
В главе "Внедрение зависимостей" встретил следующую фразу:
В связи с этим, у меня возникли следующие вопросы:
Я считаю, что иметь состояние для класса в ООП это не обязанность. Все объекты в ООП (даже т.н. stateless сервисы) имеют состояние, взять хотя бы внутренний идентификатор, зависимости, конфигурацию. Почему наличие атрибутов с данными в моделях Eloquent считаются отдельной ответственностью?
The text was updated successfully, but these errors were encountered: