
Alexey
14.02.2018
14:42:59
пожалуй, самое лаконичное описание - на википедии

Maksim
14.02.2018
14:43:07

Alexey
14.02.2018
14:43:30
подожи ка, что значит каждая буква, я объяснил :)

Maksim
14.02.2018
14:43:50

Google

Alexey
14.02.2018
14:44:01
http://lmgtfy.com/?q=DDD

Kirill
14.02.2018
14:44:09
Ну, те, кто его применял, можете своими словами?

Maksim
14.02.2018
14:44:41
ну на сию тему как бы умные люди целые книги пишут. Что ты хочешь услышать "своими словами"?

Alexey
14.02.2018
14:44:59
если совсем кратко - это правила организации ООП-кода

Maksim
14.02.2018
14:45:14
если написать "DDD говно", налетит обсуждальщиков) ок триггер, проверенный)

Bohdan
14.02.2018
14:45:55
имхо это такие правила организации, при которых твой код соответствует терминам, в которых разговаривает заказчик
ubiquitous language
все. как Эванс завещал, чо)
но это довольно размытое понятие

Roman
14.02.2018
14:47:13
Domain Driven Design
Это когда ты проектируешь систему максимально близко отражающую бизнес-требования

Ilia
14.02.2018
14:48:11
А что, можно как-то по-другому?

Bohdan
14.02.2018
14:48:35
в любом случае система будет отражать бизнес-требования так или иначе
ну, если ты на них не забил, конечно)

Google

Ilia
14.02.2018
14:49:29
Типа делаю я систему, делаю... И - бац, сделал вместо бухгалтерии игру в танчики...

Sergey
14.02.2018
14:49:37
точнее когда в коде выражены понятия предметной (бизес) области.

Bohdan
14.02.2018
14:50:05
тоже не совсем - можно сущностями выразить понятия, но этого недостаточно

Roman
14.02.2018
14:50:24
А что, можно как-то по-другому?
Ну типа можно сделать слой сервисов, оперирующий репозиториями всякими и dto'шками, а можно сделать сущности, отражающие предметную область. И у тебя будет не OrderService.CancelOrder, а у самого экземпляра класса Order будет метод order.Cancel.

Ilia
14.02.2018
14:50:53
А есть разница?

Sergey
14.02.2018
14:50:58
в любом случае система будет отражать бизнес-требования так или иначе
Можно сделать по-разному. к примеру тебе нужно реализовать бизнес-требование. Пациент записывается на прием к врачу. Можно взять врача, сделатьметод записаться нга прием и передавать пациента.
А можно вспомнить что происходит в поликлинике в реальности, что есть регистратура, которая записывает, и вот ты уже записываешь пациента на прием через регистратуру

Roman
14.02.2018
14:50:59
За этим и нужны агрегаты.

Sergey
14.02.2018
14:51:05
это если очень примитивно

Roman
14.02.2018
14:51:36
А есть разница?
В первом случае бизнесовая логика знает о базе (пусть и косвенно, через интерфейсы репозиториев), во втором случае - она о ней не значет ничего.

Ilia
14.02.2018
14:52:26
Да все проще.

Roman
14.02.2018
14:53:12
У меня связующим звеном между базой и самим доменом являются обработчики команд в терминах CQRS. Ну то бишь они достают из базы агрегаты и знают как это делать. А дальше на самих агрегатах просто методы дёргаются.
Ну и после всех манипуляций, агрегаты обратно складываются в базу. А чтобы всё это дело было атомарным - оно выполняется в рамках одной транзакции.

Tex
14.02.2018
14:58:57

Sergey
14.02.2018
14:59:45
больше сервисов-менеджеров
а почему cancel не у Order?

Roman
14.02.2018
15:00:58
На столе голубая книжечка лежит даже вот прям сейчас)

Sergey
14.02.2018
15:01:20
про контексты, про UL

Google

Roman
14.02.2018
15:01:37

Sergey
14.02.2018
15:01:58
а то что книжка лежит - Эрик уже за нее извинялся что херово написал и никто ничего не понял

Roman
14.02.2018
15:02:12
Но там и про техническую сторону было. Сущности там, агрегаты, методы в сущностях и т.д.

Sergey
14.02.2018
15:02:18
а сервисы менеджеры противоречат идее UL

Tex
14.02.2018
15:02:22
а почему cancel не у Order?
всё слишком сложно, сущности - просто VO с тонной гетеров сеттеров и маппингом на базу, никакой логики. вся логика в классах типа ЧтоТоТамService. потихоньку правим, но жизнь сурова.

Sergey
14.02.2018
15:02:42

Roman
14.02.2018
15:02:47

Sergey
14.02.2018
15:02:48
раз вся логика ищ сущностей вытекла

Roman
14.02.2018
15:03:18
Максимум через интерфейс может инфраструктура слегка подтекать.

Sergey
14.02.2018
15:03:25

Roman
14.02.2018
15:03:27
Ну типа хэшилки паролей для создания юзера.

Sergey
14.02.2018
15:03:51

Tex
14.02.2018
15:03:53
ну тогда заветы Эванса тебе точно не нужны
Ну как тебе сказать, они мне как раз и нужны, изначально всю эту грязь навёл не я, вот разгребаем сейчас. Но вообще спрашивал не я, я просто сагрился, потому что как раз в этот момент, когда сообщение увидел, на соседнем мониторе этот метод открыт был %)

Артур Евгеньевич
14.02.2018
15:12:54

Evgenij
14.02.2018
15:18:09

Tex
14.02.2018
15:20:02
В любом случае это не то чтобы сильно критично. Да, лишний слой абстракции и лишние классы, но, учитывая что это уже написано, работать особо не мешает. Это стокгольмский синдром?

Ihor
14.02.2018
17:26:23
Наброшу на вентилятор. По поводу отказов от сеттеров. Вот такой пример, допустим у нас есть автомобиль. Собрали его на заводе (при инициализации объекта, передали всё что нужно в конструктор) и он колесит себе просторы. Вот тут твсё хорошо. Однако, во время жизни объекта (автомобиля), его решили затонировать. Вот тут как быть? Это изменение объекта "снаружи"...

Sergey
14.02.2018
17:27:21
ну и опять же ты не будешь "заменять лобовуху" во время езды, так?

Google

Ihor
14.02.2018
17:28:07
во время жизни объекта, всё может быть
Decorator — структурный шаблон проектирования, предназначенный для динамического подключения дополнительного поведения к объекту. Мне кажется, что тонировка это свойство... С другой стороны - влияет на количество пропускаемого света..

Артур Евгеньевич
14.02.2018
17:51:52

Dmitry
14.02.2018
17:53:25

Shmaltorhbooks
14.02.2018
17:57:51
Изменение свойств "цвет" и "прозрачность" у всех или некоторых стёкол
И/или возможно, появление градиента цветов, если совсем упороться)

Dmitry
14.02.2018
18:02:07

Shmaltorhbooks
14.02.2018
18:03:17
Если нужно декомпозировать до физических свойств - да

Admin
ERROR: S client not available

Shmaltorhbooks
14.02.2018
18:04:09
Но с точки зрения пользователя же - стало темнее и изменились цвета)

Ihor
14.02.2018
18:05:00

Dmitry
14.02.2018
18:05:02

Shmaltorhbooks
14.02.2018
18:05:36
С точки зрения пользователя - он купил стекло не с теми свойствами)
Все зависит от того, насколько глубоко нужно моделировать
Кто и как будет взаимодействовать с объектом

Артур Евгеньевич
14.02.2018
18:06:31
всё равно это изменение объекта из вне
объекьы всегда будут изменяться во время взаимодейсвтия. Суть в том чтоб инкапсулирвоать реализацию. То есть один объект должен посылать другому сообщение "затонируйся" а не "установиСвойствоТонировкаВОпределенныйЦвет"

Shmaltorhbooks
14.02.2018
18:07:54

Roman
14.02.2018
18:07:59

Dmitry
14.02.2018
18:08:30

Roman
14.02.2018
18:08:41

Google

Shmaltorhbooks
14.02.2018
18:08:48
Тот

Артур Евгеньевич
14.02.2018
18:09:02
а если VO то воссаздать свою копию с измененными свойствами

Shmaltorhbooks
14.02.2018
18:09:20
Меняется состояние, интерфейс тот же

Dmitry
14.02.2018
18:09:51
новый

Shmaltorhbooks
14.02.2018
18:09:56
А поведение зависит от состояния, что не так?

Roman
14.02.2018
18:10:20

finkel
14.02.2018
18:23:18

Артур Евгеньевич
14.02.2018
18:32:22
кто нибудь может объяснить схему HTTP =(a)> Command => Command Bus => Command Handler => Event => Event Dispatcher => Event Subscriber => (maybe repeat to (a)
??

Bohdan
14.02.2018
18:35:26
о, моя тема) что интересует?

Sergey
14.02.2018
18:36:30

Артур Евгеньевич
14.02.2018
18:37:54
о, моя тема) что интересует?
Да вот пытаюсь въехать во всю эту движуху. Вроде разобрался что пиздато когда контроллер из запроса создает Команду(dto по сути) котоаря описывает какие то действия, далее команда передается в comandBus где обрабатывается разными хендлерами. Если я не прав , то поправьте.

Sergey
14.02.2018
18:37:58

Bohdan
14.02.2018
18:38:31

Артур Евгеньевич
14.02.2018
18:38:46
а) ты ответил на мой вопрсо из соседнего чата

Bohdan
14.02.2018
18:38:47
суть в том, что хендлеры команд не должны запускать другие команды

Артур Евгеньевич
14.02.2018
18:38:54
чем листенеры отличаются от хендлеров??