@prophp7

Страница 1204 из 1387
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..

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 волшебным образом подмешивать?

как тогда делается нормальная архивация с возможостью сразу востановить данные
зависит от задачи. в примитивном случае если мы говорим о том что мне нужен простой круд - я могу просто взять какую-нибудь надстройку над своим любимым постгресом а архивацию сделать за счет тригеров (BEFORE DELETE ON ....)

(я к тому что я считаю глупым для простого круда писать код)

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
для того, что бы понимать, чем плохи трейты, надо понимать, что такое зона ответсвенности. То, что в твоём актив рекорде внутри перемешаны люди и кони не делают трейты лучше, ибо хуже не будет. Почему объект должен уметь себя сохранять, а ещё сохранять "типа удалённым" - оставим за кадром.

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
и этот ответ был пару раз... но эт бесполезно для юишников и ларавельщиков
потому что они не знают о существовании Row Data Gateway)

Maksim
28.07.2018
16:13:37
потому что они не знают о существовании Row Data Gateway)
а зачем оно? можно написать $user>save() и ок

Dmitriy
28.07.2018
16:14:17
и этот ответ был пару раз... но эт бесполезно для юишников и ларавельщиков
пойду выкину свою симфни. Ответ был в стиле." Нафиг тебе АР, нафиг тебе это, и еще 100 причин. " ну это такое...

Maksim
28.07.2018
16:14:46
пойду выкину свою симфни. Ответ был в стиле." Нафиг тебе АР, нафиг тебе это, и еще 100 причин. " ну это такое...
ты хочешь, что бы тебе рассказали как правильно решить задачу, но хочешь сделать сие на свой лад через задницу?)

Sergey
28.07.2018
16:14:52
теперь давай прикидывать - soft delete - это просто флаг в базе который отмечает строку что мол игнорь меня

$model->isRemoved = true; $mode->save()

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 сущностей

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

Dmitriy
28.07.2018
16:17:25
$model->isRemoved = true; $mode->save()
это тоже такое решение если в проекте нет оберок над AR.

Sergey
28.07.2018
16:18:07
это тоже такое решение если в проекте нет оберок над AR.
ну сделай метод внутри своей сущности, 5 строчек кода public function archive() { $this->isRemoved = true; $this->save(); }

и что значит "нет оберток" - какие к черту обертки?

Admin
ERROR: S client not available

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

Dmitriy
28.07.2018
16:18:55
ну сделай метод внутри своей сущности, 5 строчек кода public function archive() { $this->isRemoved = true; $this->save(); }
это конечно хорошо. но и нужно еще менять все find. вот в этом и проблема

Sergey
28.07.2018
16:18:59
трейты это воистину goto в ООП

это конечно хорошо. но и нужно еще менять все find. вот в этом и проблема
не все - тебе нужен один файнд который наоборот тебе выберет строки где isRemoved=true

а потом пихать это в дефолтный скоуп не стоит. Лучше сделать отедльный скоуп который подмешивается засчет более менее адекватного API шляпы через которую ты выорки делаешь

а не неявно чето там подмешивать

опять же штуки типа таких это пара строк кода

и заметь - абсолютно никакого дублирования логики

Maksim
28.07.2018
16:20:24
трейты это воистину goto в ООП
да нет. Это просто возможность аще не думать. захерачил и вперёд юзать всюду. Ну или для метрик красивых

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
но в целом можно так юзать. другой хороший пример трейтов - LoggerAwareTrait
и получить протектед логгер и геттер заботливо, да)

f4rt~
28.07.2018
16:23:44
завязывать логику на события персистенса так себе идея
я так полагаю от HasLifeCycleCallbacks ты не в восторге?)

$model->isRemoved = true; $mode->save()
в целом я и имел в виду что то такое

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

и то это должно быть совсем плохо

Sergey
28.07.2018
16:25:00
ну тобишь крч говоря во время рефакторинга?)
жесткого какого-то где все оч плохо

где хуже не будет

Страница 1204 из 1387