
Anton
01.11.2016
14:51:07
@fes0r тогда тайпхинтинга не будет, и от массива не сильно отличаться будет)

Sergey
01.11.2016
14:51:25
Anton именно по этому я юзаю массивчики

Aleh
01.11.2016
14:51:26
слишком жесткий оффтоп

Fayozjon [CybernatiC]
01.11.2016
14:51:33
?

Google

Fayozjon [CybernatiC]
01.11.2016
14:51:34
Сорян

Sergey
01.11.2016
14:52:22
Anton повторюсь. Предствь что у тебя за DTO отвечает сущность. И тебе запрещено редактировать этот код (буквально, сущность нельзя редактировать)
Anton и тебе надо добавить еще один вариант отображения данных а для этого в твоем DTO не хватает данных
и тебе надо уже новое но сделать его ты не можешь

Anton
01.11.2016
14:52:48
@fes0r ну кагбе завести пару лишних классов на каждую сущность/аггрегат, зато по царски - сразу увидишь, что в дто нужно новое поле добавить, или поменять формат
почему не можешь?)

Sergey
01.11.2016
14:53:05
Anton но тогда ж никакого разделения

Anton
01.11.2016
14:53:09
руки связали?

Sergey
01.11.2016
14:53:20
Anton да, связали. Просто запрещено менять код.
SRP и все дела связали тебе руки

Anton
01.11.2016
14:53:49
ну в ентити добавляешь новый метод, который отдает новое дто

Sergey
01.11.2016
14:54:14
Anton ты только что нарушил SRP, ты поправил класс сущности (бизнес объект) потому что тебе надо что-то по другому сделать на UI
теперь класс сущности имеет две разные (абсолютно) причины для внесения изменений

Google

Sergey
01.11.2016
14:54:37
нарушен принцип единой ответственности
в аду для таких есть отдельный котел

Anton
01.11.2016
14:55:41
при добавлении связи к сущности - тоже запрещено менять сущность? ну и не обязатльно для UI - я в данном контексте говорил про API бэкенд

Aleh
01.11.2016
14:55:53

Anton
01.11.2016
14:56:09
ну его может просить и другой апи, например)

Aleh
01.11.2016
14:56:16
без разницы кто его просит)

Sergey
01.11.2016
14:56:21
Anton ты серьезно не понимаешь что такое SRP?
https://www.youtube.com/watch?v=yIf3EQmHmyw
пожалуй самое простое и наглядное объяснение из всех что я видел
там же описываются причины почему это может быть полезным

Anton
01.11.2016
14:57:59
вечером видос гляну
я понимаю, что это дополнительная обязанность, которую нужно вынести
но нормально вынести я не понимаю как
и идея открыать стэйт объекта другому объекту меня не радует еще больше
ибо в моем примере у класса появляются лишние методы, но они логически никак не скажутся на работе всего приложения
а в случае с разделением стейта - будет полный пиздец и содомия

Aleh
01.11.2016
15:02:26
ну CQRS решает таки проблему

Anton
01.11.2016
15:02:57
ну CQRS для такого случая - это как с авианосца по воробьям)
ну и плюс моего подхода в том, что есть контракт, ну и ошибку я увижу до коммита, например

Sergey
01.11.2016
16:42:29
Anton вот кроме CQRS гарантированного решения проблемы как бы нет.
ну во всяком случае в PHP

Google

Sergey
01.11.2016
16:42:58
friend классы частично решили бы проблему целой минимальной связанности

Anton
01.11.2016
16:44:02
я может не верно понял, потому что когда читал о CQRS - понял, что это парадигма всего приложения, и если изначально ты ее не заложил, то потом не вкрячить
и она довольно усложняет все

Sergey
01.11.2016
16:45:19
Anton ну как... и да и нет. Все отличие будет в устранении автоинкрементов и подобной чуши
Anton а ReadModel можно и так и так вкрутить

Anton
01.11.2016
16:45:54
хм, тогда может и имеет смсл копнуть глубже

Sergey
01.11.2016
16:46:07
ну как, это оверхэд на самом деле
но не так что надо закладывать изначально

Anton
01.11.2016
16:46:41
не, тогда нет) само приложение и так дичайше сложное для меня

Sergey
01.11.2016
16:46:57
вот в сложных приложениях думать на тему CQRS имеет смысл)

Anton
01.11.2016
16:47:22
чтоб оно стало еще сложнее?))

Sergey
01.11.2016
16:47:59
CQRS понижает сложность

Sergey
01.11.2016
16:48:04
разделение операций записи и чтения
p.s. причем обработка команд не обязательно должна быть void
ну мол... в очень большом упрощении это всего лишь значит что ты пишешь в одну фигню а читаешь из другой. Например пишешь в ORM а читаешь из Gateway какого или DQL/SQL
это позволяет держать сущности в порядке и не засорять их посторонней фигней
например у меня на паре проектов разработчики счетчичи просмотров впилили в сущность
вот это я называю "посторонней фигней"

Anton
01.11.2016
16:52:01
я пока в CQRS вообще не вдавался - не совсем понимаю всю идею

Sergey
01.11.2016
16:52:54
идея - писать в одну херню, читать из другой) это позволяет тебе делать между ними дикие архитектурные приклюхи

Google

Sergey
01.11.2016
16:53:14
например обновить нормализованные данные, построить денормализованные агрегации и читать уже из них
или делать event sourcing как крайность
когда тебе пипец важно не проебать вообще никаких данных
пишешь ивенты читаешь данные

Aleh
01.11.2016
17:11:51
тут все равно есть один геттер или что-то вроде геттера - ивенты ж из сущности по итогу вытянуть надо)
если мы про event sourcing

Admin
ERROR: S client not available

Aleh
01.11.2016
17:13:08
а если нет, то тогда все равно надо как-то вытягивать стейт, можно и рефлексией конечно и автогенерить сущности

Sergey
01.11.2016
18:19:34
> ивенты ж из сущности по итогу вытянуть надо)
retriave не геттер
он меняет стэйт
это как array_pop

Aleh
01.11.2016
18:30:27
хотя, ивенты может и вообще не стейт модели
ну, ты в самом аггрегате никогда к списку ивентов не обращаешься же
твоя единственная там операция это сообщить о том, что что-то произошло

Sergey
01.11.2016
18:33:00
ну тип того

Aleh
01.11.2016
18:33:01
реакция на произошедшее происходит как-будто тебя кто-то извне пнул, типа псс чувак, тут ты вот это сделал, живи с этим дальше как хочешь
а кто пинает и кого пинать деталь реализации
там даже active record может быть))
recordThat(Event $event) {
$event->save();
$this->notifyThat($event);
}

Google

Aleh
01.11.2016
18:35:31
ну или как-то более красиво, не вмешивая ar в наши ивенты, но суть в общем-то не меняется
$dao = new EventDAO($event); $dao->save();

Sergey
01.11.2016
18:48:16
класс юзера на 700 строк(

Aleh
01.11.2016
20:34:24
https://habrahabr.ru/post/314114/ прикольно конечно

Sergey
01.11.2016
22:17:39
кто нибудь юзал blackfire в докере?
мне тут cli скриптик надо отпрофилировать и я туплю
не знаю как опубликовать пробу
что бы глянуть че почем

Sergey
01.11.2016
22:18:41
? запусти без докера

Sergey
01.11.2016
22:18:48
не выйдет

Sergey
01.11.2016
22:18:59
а в доках смарел?

Sergey
01.11.2016
22:18:59
окружение надо

Sergey
01.11.2016
22:19:00
https://blackfire.io/docs/integrations/docker

Sergey
01.11.2016
22:19:07
смотрел, там про http

Sergey
01.11.2016
22:19:13
а разница?

Sergey
01.11.2016
22:19:13
cli не хочет почему-то так дебажиться
сча еще гляну может с конфигами намудрил
а все, понял
401-ая ошибка