Size: a a a

2019 January 28

М

Мряка in Laravel UA
хотя возможно у меня просто наболело на текущем проекте 😞
источник

В

Вячеслав in Laravel UA
Проектов в открытом доступе конечно нет, т.к. NDA.

Используем ровно так как рассказано в докладе. Действие производиться над объектом. В толстых моделях не вижу ничего страшного, т.к. этот слой изначально создавался для того что бы хранить там бизнес логику. Я работаю с одним из разработчиков Yii framework, мы дискутировали на эту тему, его доводы как раз таки были в пользу логики в моделях. Для того что бы не нагромождать класс и случайно там не потеряться среди обилия методов, мы используем Single Use трейты. UserAttributes, UserRelations, UserActions
Также одим из инструментов в докладе рассматривалось введение новых сущностей.
источник

М

Мряка in Laravel UA
а как же single responsibility?
источник

AA

Ann Ali in Laravel UA
Введение, новых сущностей(Purchase например), мне очень похоже на сервис
источник

В

Вячеслав in Laravel UA
Мряка
или когда внезапно часть данных нужно тянуть не из бд, а из апи, но у тебя уже половина модели завязана на мутации посредством raw sql запросов
Здесь чувтсвуется изначално не верных подход. Если есть кейсы получения данных о сущности из БД или из АПИ, здесь скорее нужена репозиторий
источник

М

Мряка in Laravel UA
т.е в случае изменения бизнес-требований, как избежать необходимости переписывать половину модели, чтобы добавить еще один форма репорта на основе, скажем, дополненных сторонним апи данных?
источник

М

Мряка in Laravel UA
плодить методы уровня $model->reportA(), $model->reportB()?
источник

AA

Ann Ali in Laravel UA
Но метод Славы всеравно попробую. + лара явно способствует такой организации кода
источник

М

Мряка in Laravel UA
Лара вообще не особо способствует какой либо организации кода, пожалуй
источник

AA

Ann Ali in Laravel UA
Не могу не согласиться)
источник

В

Вячеслав in Laravel UA
Мряка
а как же single responsibility?
Здесь тонкая грань понимания этого принципа. Если брать этот принцип жестко, то дефолтная модель в принципе нарушает SRP, т.к. Eloquent построенный по паттерну Active Record умеет и find, и get, и update и save.
Здесь можно почитать дисскуссию на эту тему - https://twitter.com/taylorotwell/status/1023223691465748480
источник

В

Вячеслав in Laravel UA
Я бы сказал Лара и сообщество, способствует написанию чистого кода.
источник

В

Вячеслав in Laravel UA
Мряка
т.е в случае изменения бизнес-требований, как избежать необходимости переписывать половину модели, чтобы добавить еще один форма репорта на основе, скажем, дополненных сторонним апи данных?
Не совсем понятно, зачем переписывать пол модели при изменении чего-то?
источник

М

Мряка in Laravel UA
ну, я понимаю, что работаю с ужасно старым и плохо организованным кодом. И в целом, тут хватает проблем. Но то, что Active Records уже есть антипаттерн репозитория и нарушает SRP - не повод для дальнейшего усугубления ситуации расширением обязанностей модели
источник

В

Вячеслав in Laravel UA
Здесь нужно понять важную вещь, когда ты добавляешь бизнес логику которая работает с данными непосредственно этой модели. Это наоборот упрощает работу с данными и способстувет инкапсуляции (Адам показывал примеры, как инкапсулируется код, при таком подходе)
источник

М

Мряка in Laravel UA
ну, поскольку я нда никаким не связан, думаю, могу привести примеры.
Есть у нас некий сервис, который в обход SRP, составляет репорты. В нем написаны и запросы к бд, и колы апи, и композиция данных и формирование excel таблиц , и ссылки на файл получившийся
источник

М

Мряка in Laravel UA
и вот задача стояла как "удалить зависимость от таблицы X, заменив данные из нее на данные из нового API"
источник

М

Мряка in Laravel UA
в итоге ушло 2 недели на то, чтобы развязать клубок вызова статических методов, меняющих какие-то свойства, коих у класса было под сотню
источник

В

Вячеслав in Laravel UA
Не думаю, что это как-то соотносится с темой про модели
источник

М

Мряка in Laravel UA
скорее про SRP
источник