
Sergey
28.07.2018
15:53:34
типа "смотрите как пиздато, а теперь смотрим на симфони с его 100 строк на класс"
"покупайте наш продукт он пиздат по метрикам"
завязывать логику на события персистенса так себе идея

Google

Sergey
28.07.2018
15:54:53
может быть проблема с подходами к которым ты привык?
обмажутся своей ларавель а потом плачут что код не поддерживаемый и надо на микросервисы резать

Dmitriy
28.07.2018
15:55:54

Sergey
28.07.2018
15:56:13
потому что трейты не миксины

Dmitriy
28.07.2018
15:56:32
каковы альтернативы в контексте AR

Sergey
28.07.2018
15:56:45
и да, выбирать можно не только между AR и Data Mapper

Dmitriy
28.07.2018
15:57:34
а тебе так нужна AR?
допустим да. это другой уже вопрс. опустим нужность ар, дм, тг для конкретного проекта

Sergey
28.07.2018
15:57:57
ну давай, опиши задачу

Dmitriy
28.07.2018
16:00:57
нужен простой круд с софтом делет.
Архивация не подходит. данные пользователь может достать из корзины и все сразу должно работать.
но счас ты скажешь зачем АР если есть DM, TG..

Sergey
28.07.2018
16:01:33

Google

Sergey
28.07.2018
16:01:42
может зависит от того как ее делать?)
что до AR vs DM vs TG Vvs RDG
я понимаю откуда у популярности AR ноги ростут
(потому что даже школьник в состоянии реализовать AR и в случае с крудом у тебя бизнес логики почти нет)
но давай подумаем чем в этой задаче плох софт делит

Dmitriy
28.07.2018
16:03:36

Sergey
28.07.2018
16:04:10
1. ты не удаляешь, ты перемещаешь в карзину
2. связанные данные - что с ними будет происходить? Или как это любят делать - джойны и where волшебным образом подмешивать?
(я к тому что я считаю глупым для простого круда писать код)

Dmitriy
28.07.2018
16:06:18

Sergey
28.07.2018
16:06:32
ну и опять же
ты говоришь о трейте который все что делает это при $row->delete() вешает флаг + дефолтный скоуп объявляет
тебе рубисты не рассказывали чем плохи дефолтные скоупы?)

Dmitriy
28.07.2018
16:07:36
INSERT FROM
Представляю как пользователь по 5 раз в день удалил и востановл например статью. и все это удаляем и вставляем.

Sergey
28.07.2018
16:08:15
казалось бы причем тут трейты

Dmitriy
28.07.2018
16:08:42
ну ты уехал с трейтов в нужность софтделет

Sergey
28.07.2018
16:09:15
а потом каскадный софт делит трейт
а потом переопределять методы трейта что бы все везде было так а вот тут по другому

Google

Sergey
28.07.2018
16:10:24
а потом больше переопределять, а потом свой трейт, а потом ты уволился а чел за тобой охуевает ибо у тебя там уже не простой круд, там еще трейты есть которые ревизии при изменениях херачат, выборки патчат волшебным образом

Maksim
28.07.2018
16:10:56
для того, что бы понимать, чем плохи трейты, надо понимать, что такое зона ответсвенности. То, что в твоём актив рекорде внутри перемешаны люди и кони не делают трейты лучше, ибо хуже не будет. Почему объект должен уметь себя сохранять, а ещё сохранять "типа удалённым" - оставим за кадром.

Sergey
28.07.2018
16:11:35
вжопу семантику я хочу круд

Maksim
28.07.2018
16:12:04

Dmitriy
28.07.2018
16:12:06
я все слышу как плохо, как плохо. но мой первоначальный вопрос так и остался без ответа. =(

Sergey
28.07.2018
16:12:08
а если хочется круд - нафига вообще писать бэкэнд, берешь rethinkdb или любую документно ориентированную базу с rest api из коробки и вжух
вот тебе пример

Maksim
28.07.2018
16:12:53

Sergey
28.07.2018
16:13:11

Maksim
28.07.2018
16:13:37

Dmitriy
28.07.2018
16:14:17

Maksim
28.07.2018
16:14:46

Sergey
28.07.2018
16:14:52
теперь давай прикидывать - soft delete - это просто флаг в базе который отмечает строку что мол игнорь меня
$model->isRemoved = true;
$mode->save()

Maksim
28.07.2018
16:15:37

Sergey
28.07.2018
16:15:37
вжух

Google

Sergey
28.07.2018
16:16:10
но если у человека вся логика работы приложения сводится к отдельным табличкам без связей - почему бы и нет) вдруг у него там все на jsonb и агрегатах

Maksim
28.07.2018
16:16:25
ой вряд ли)

Sergey
28.07.2018
16:16:46
я просто блядь не понимаю зачем нужен трейт для двух строчек кода

Maksim
28.07.2018
16:16:49
а что за базы без связей? да ещё и в крудах. т акие существуют?

Sergey
28.07.2018
16:17:06
даже если у меня 10 сущностей

Maksim
28.07.2018
16:17:22

Sergey
28.07.2018
16:17:24
которым нужна такая вот шляпа - если я просто напишу 20 строчек кода это даже не будет считаться дублированием

Dmitriy
28.07.2018
16:17:25

Sergey
28.07.2018
16:18:07
и что значит "нет оберток" - какие к черту обертки?

Admin
ERROR: S client not available

Sergey
28.07.2018
16:18:48
это как гении которые любят в доктрине ID выносить в трейт что бы аннотации не дублировать. DRY хули

Dmitriy
28.07.2018
16:18:55

Sergey
28.07.2018
16:18:59
трейты это воистину goto в ООП
а потом пихать это в дефолтный скоуп не стоит. Лучше сделать отедльный скоуп который подмешивается засчет более менее адекватного API шляпы через которую ты выорки делаешь
а не неявно чето там подмешивать
опять же штуки типа таких это пара строк кода
и заметь - абсолютно никакого дублирования логики

Maksim
28.07.2018
16:20:24

Google

Sergey
28.07.2018
16:20:24
потому что логики тут нет

Dmitriy
28.07.2018
16:21:00

Sergey
28.07.2018
16:21:12
люди не понимают что две вещи которые выглядят одинаково если они на разных сущностях скорее всего в будущем будут меняться по разному

Maksim
28.07.2018
16:21:25

Sergey
28.07.2018
16:21:51
трейты хороши для реюза бойлерплейта

Maksim
28.07.2018
16:21:53
ни ар, ни трейты, проблем никаких не решают

Sergey
28.07.2018
16:22:00
например - вот у тебя есть класс типа EntityManager
и там зиллион методов
и ты хочешь дать возможность своим пользователям декорировать удобненько
написал им трейт который просто делигирует вызов и сделал мир лучше
это не так клево как в kotlin с их делегацией
но в целом можно так юзать. другой хороший пример трейтов - LoggerAwareTrait
однако, я у себя на проектах за использование оных ругать буду

Maksim
28.07.2018
16:23:34

f4rt~
28.07.2018
16:23:44

Sergey
28.07.2018
16:24:03
для мменя единственный оправданный юзкейс для трейтов где прям не доебешься - это когда уже все плохо и тебе надо как временную меру куда-то общую логику запихнуть
и то это должно быть совсем плохо

f4rt~
28.07.2018
16:24:11
только в отдельном слушателе, обсервере

Sergey
28.07.2018
16:25:00
где хуже не будет