
Sergey
24.02.2018
10:18:35
так что если ты закоммитил изменеия - собираешь ивенты и впуть

Anton
24.02.2018
10:19:39

Google

Maxim
24.02.2018
10:20:20
Сами себе противоречите. К чужому коду притензии предъявляете, что ивентов нет, а в своем "так и должно происходить" при одинаковой обстановке

Maksim
24.02.2018
10:20:42
товарищ явно не очень понимает что за эвенты, на кой хер нужны и как они к данным относятся

Sergey
24.02.2018
10:20:51

Maxim
24.02.2018
10:20:52

Sergey
24.02.2018
10:21:50

Anton
24.02.2018
10:21:57
Еще раз перечитай. То что ты сделал равносильно тому что $pdo->update(...). Это никто в здравом уме (даже джун) в коде приложения делать не будет.

Sergey
24.02.2018
10:22:11
я видел)

Roman
24.02.2018
10:22:23

Anton
24.02.2018
10:22:24
Ну тогда вон с профессии и делов

Maxim
24.02.2018
10:22:42

Sergey
24.02.2018
10:23:05
с другой стороны, у тебя есть возможность через код приложения сделать это минуя логику нотификаций

Google

Sergey
24.02.2018
10:23:37
при том что в AR есть лайфсайкл ивенты на худой конец которые позволяют привязать эту логику

Anton
24.02.2018
10:23:45
Ну и менять ты его будешь у сущности User, а не у объекта UserRecord

Sergey
24.02.2018
10:24:12
прикол в том что в том варианте который предлагает Антон у тебя нет доступа к UserRecord напрямую, только через User
весь прикол в том что ровно так же, как вместо репозитория за сохранение релейшенов отвечают бихейверы, можно полностью отказаться от репозитория
он просто вызывает save
туда же можно запихнуть и логику публикации доменных событий
и мы избавляемся от лишней абстракции
мы все еще можем захотеть выборки к примеру как-то хэндлить через отдельный интерфейс
но это уже другая история
вот если бы Дмитрий в репозитории разруливал граф зависимостей сущностей

Maxim
24.02.2018
10:30:35

Sergey
24.02.2018
10:30:39
и сохранял бы все так, что бы не нужно было кастылей в духе $files = $this->files;...
и запретил бы сохранение сущностей вне контекста репозитория
вот тогда да, смысл был бы

Anton
24.02.2018
10:31:44

Sergey
24.02.2018
10:31:51
вот и вся разница)

Maksim
24.02.2018
10:32:39
меня всегда коробило то, что сущность/агрегат (похеру) знает как себя сохранять...

Sergey
24.02.2018
10:32:50
в смысле "знает"

Google

Maksim
24.02.2018
10:33:05
User::save

Sergey
24.02.2018
10:33:11
не, это удобно

Anton
24.02.2018
10:33:18
У Максима жесткое неприятие AR :)

Sergey
24.02.2018
10:33:34
хорошо жить когда у тебя есть готовые дата мэпперы

Maksim
24.02.2018
10:33:37
удобно?) удобно не заниматься хернёй с ООП)
и ддд следом

Sergey
24.02.2018
10:33:45
а когда у тебя легаси, или когда мы попали в 2008-ой?

Maxim
24.02.2018
10:33:45

Like
24.02.2018
10:34:12
У него AR только для чтения, нет?

Anton
24.02.2018
10:34:19
Именно

Sergey
24.02.2018
10:34:24

Maksim
24.02.2018
10:34:35
слово удобно - оно плохое)
оно субъективное и кому-то удобно ю2 использовать, потому что он не заставляет мозги использовать) удобно же)

Anton
24.02.2018
10:34:44
Два класса: User и UserRecord
У User никаких save нету.

Maxim
24.02.2018
10:35:05
Именно
Т.е. в приложениях на yii2 ты бы тело save переопределял на {}?

Sergey
24.02.2018
10:35:15

Dmitry
24.02.2018
10:35:24

Sergey
24.02.2018
10:36:09

Anton
24.02.2018
10:36:10

Sergey
24.02.2018
10:36:33
хотя сделать плохо всегда проще чем хорошо...

Google

Sergey
24.02.2018
10:36:34
все тлен

Anton
24.02.2018
10:37:51
Приходит кто-то на проект, получает задачу сделать метод изменения email пользователя. Открывает класс User и такой смотрит, а у нас тут ActiveRecord, ну ок сделаю экшен:
$user = User::find($id);
$user->email = $email;
$user->save();

Maksim
24.02.2018
10:38:39
стильно, модно, молодёжно)

Anton
24.02.2018
10:38:40
Про то что там какие-то репозитории есть чтобы получить/cохранить пользователя и это правильный путь на проекте откуда он узнает?

Sergey
24.02.2018
10:39:07
Антон, ну на само деле проблема то в другом
это можно в ридми написать
типа "нюанс - юзайте репозиторий"

Anton
24.02.2018
10:39:27
Ну я сейчас тоже утрирую понятно

Sergey
24.02.2018
10:39:36
меня лично больше смущает другое

Maxim
24.02.2018
10:39:47

Admin
ERROR: S client not available

Sergey
24.02.2018
10:40:10
разговоры об абстракциях + кастыли что бы часть работы репозитория делигировать обратно модели (большую часть замечу) и которая требует кастылей в коде доменной логики, при том что эти кастыли вот вообще не очевидны и не интуитивны обывателю
где можно расценивать что предыдущий разработчик просто умер
ну или ты просто желаешь ему смерти)

Anton
24.02.2018
10:41:13

Maxim
24.02.2018
10:41:23
Прекратите это
ты не знаешь ты видимо не видел ...

Maksim
24.02.2018
10:41:57
ну ты реально не знаешь и не видел)
в каждом слове читается то, что ты не понимаешь о чём тебе по кругу уже 3й час втирают)

Maxim
24.02.2018
10:42:34

Maksim
24.02.2018
10:43:24
у меня был проект на 200 метров кода с файлами на 7 тысяч строк условных операторов, завёрнутых в свитч/кейсы) иди, разбирайся)

Google

Sergey
24.02.2018
10:43:36
Прекратите это
ты не знаешь ты видимо не видел ...
ну а ты начни анализировать, да, я понимаю что тут много утрируют, переоценивают значение проблем, и что это все далеко не самый худший код который можно увидеть на yii. я бы даже сказал что все не плохо. Меня только смущают кастыли которые находятся далеко по коду от причин этих кастылей, и то что прикрываются абстракциями и solid

Dmitry
24.02.2018
10:43:39

Sergey
24.02.2018
10:44:07

Anton
24.02.2018
10:44:18
По моему опыту выходит что количество костылей увеличивается с каждым слоем в любом случае.
В доменном их минимум и стараемся как можно лучше его вычистить.
В апликейшн уже больше, и иногда их сложно решить.
Персистенс обычно полный п... если у нас не ES конечно

Sergey
24.02.2018
10:44:24
а так да, статический анализ - мощьная штука в борьбе с безобразиями в коде
если ты настроил его нормально

f4rt~
24.02.2018
10:45:14

Sergey
24.02.2018
10:45:17
ну и в соседнем чате один человек говорит что у него моих проблем с phpstan нет

f4rt~
24.02.2018
10:46:33
посмотрю,спасибо)

Maxim
24.02.2018
10:48:40

Sergey
24.02.2018
10:48:56

Anton
24.02.2018
10:49:08


Sergey
24.02.2018
10:52:51
Меня возмутила его ТОЛЬКО ОДНА ПРЕТЕНЗИЯ
В yii2 у модели чтоб не было save()??? Какой-то нонсонс, который все поведения сломает
какие поведения, попрошу заметить что они перестают быть нужны если у тебя существует разделение на модель данных и агрегаты. Это вопервых.
Во вторых, суть притензии в том, что репозиторий только вызывает save у моделек. Доменные ивенты и их проброс можно делигировать "моделькам" так же как это сделано при помощи бихейвера для сохранения релейшенов.
Ну и то что лично меня очень напрягает - в силу того что был применен примитивный бихейвер который у нас выполняет роль "того кто сохранит весь граф" нам надо явно ему сказать об этом, и не в репозитории, а в модельке. Это невилирует всю пользу от этого самого репозитория.

Anton
24.02.2018
10:52:51
Тему предлагаю закрыть. Уже скучно. Давайте вот лучше за какие CommandBus и Саги понакидываем.

Sergey
24.02.2018
10:54:05
там у Дмирия в какой-то из статей вроде описывались отдельные персистеры - и вот это я еще понимаю
но в целом да, если проблемы не видно - не вижу смысла продолжать. Виднее ее не станет

Dmitry
24.02.2018
10:56:01

Sergey
24.02.2018
10:56:39
я еще не определился нравится ли мне сам факт того что репозиторий персистентность делигирует модельке и ее бихейверу... в целом я бы сам так делал как промежуточный этап рефакторинга например, но... это был бы промежуточный этап
словом, все что меня напрягает это кастыли, которые не явные. Коллекции сделают это явным кастылем и я как минимум буду спокоен)