
Ihor
17.09.2018
11:10:02
тоже нужно разобраться )))

Денис
17.09.2018
11:10:23
в данном контексте модель не имеет никакого отношения к предметной области
Adel выше привел пример, который сразу поставил мои мысли на место
File, HttpRequest, MailMessage и т.д. - не имеют отношения к предметной области, но являются объектами инфраструктурного уровня

Google

Aleh
17.09.2018
11:12:20

Ihor
17.09.2018
11:12:20
получаются, они не являются моделями?

Sergey
17.09.2018
11:13:52
получаются, они не являются моделями?
"модели" - это общее довольно слово. Модель данных, модель предметной области, модели описывающая работу конкретной сущности из предметной области. модель, описывающая работу с инфраструктурой. Общее и бесполезное слово.

Денис
17.09.2018
11:13:55
Связан с Email, верно: служба на прикладном уровне дёргает службу на инфраструктурном уровне, чтобы отправить письмо. Объект "письмо" не является объектом разрабатываемой предметной области.
Тут, наверное, лучше вместо "модель" использовать более конкретное - "сущность"

Denis
17.09.2018
11:18:03
Лол, мне кажется сущность в тыщу раз менее конкретно чем модель даже
Сущность сущность сущность
Мы с тобой тоже сущности

Денис
17.09.2018
11:18:28
Я привел более простой пример с "письмом". На самом деле у меня пример чуть сложнее: реестр задач, которые выполняются внешними приложениями. Внешние приложения получают эти задачи через брокер. "Задача" - это объект предметной области, а вот "реестр задач" - нет.

Denis
17.09.2018
11:19:04

Денис
17.09.2018
11:19:36

Ihor
17.09.2018
11:29:25
объект email является vo, если просто его создать и отправить?

Sergey
17.09.2018
11:30:22

Google

Sergey
17.09.2018
11:30:44
подробнее читаем про data abstraction

Ihor
17.09.2018
11:31:42
спасибо ) прочту

Денис
17.09.2018
11:31:46
возможно. мой пример с email был для простоты понимания вопроса.
если надо хранить все отправленные сообщения, то entity
но тогда, наверное, он становится объектом предметной области?

Adel
17.09.2018
11:32:55

Sergey
17.09.2018
11:33:04

Денис
17.09.2018
11:33:04
угу
а как?

Sergey
17.09.2018
11:33:53
entity это не про "хранить" а про идентификацию. Когда тебе важно что два имейла у которых содержимое идентично это разные имейлы - надо вводить им какой-то идентификатор и соответственно можно говорить о сущности. Если тебе это не важно - то это VO.
ну то есть тот факт что хранить в базе тебе удобно то что имеет идентификатор - это скорее следствие а не причина

Денис
17.09.2018
11:34:39
это ясно. я думал "не так работает" - это речь о разделении на слои

Sergey
17.09.2018
11:34:45
ну и да - VO не имеют жизненного цикла - еще одно ограничение

Денис
17.09.2018
11:35:01
))))
на практике не бывает? )

Adel
17.09.2018
11:35:33
я думал не так работает, это то, что необязательно чтото с id становится часть домена. у нас могут быть всякие таски в очереди, каждая с id. Но к домену они отношения не имеют.

Денис
17.09.2018
11:37:09
Я сейчас хочу понять всего один маленький момент, который, видимо, я упустил. Вне предметной области могут быть точно такие же entity и vo, которые работают точно так же, но просто не относятся к самому предмету. Верно? То есть не важно, относится к предмету entity или не относится - он все равно entity, не важно на каком слое (которых не бывает) он находится.


Sergey
17.09.2018
11:37:13
на практике не бывает? )
нет, проблема со слоями в том что это второстепенная вещь которая будет проявляться так или иначе если ты разделением ответственности занимаешься. Но они, повторюсь, второстепенны. То есть ты когда проектируешь про слои не думай, думай о разделении на зоны ответственности. Слои никак не должны влиять ни на структуру проекта, ни на что быто нибыло еще. Это мнимая штука. Слои полезны но намного важнее просто разделять ответственность. Причем не только горизонтально но и вертикально (bounded context). Последнее оч важно если хочется большие проекты нормально делать

Google

Denis
17.09.2018
11:37:45

Nik
17.09.2018
11:37:46
Господа, такой вопрос. Есть стандартный веб тырпрайз проект, товары - заказы (очень упрощенно, по факту конечно же сущностей больше). Все в одной базе. Есть желание попилить на микросервисы. Предположим микросервисы заказов и товаров. В заказе есть конечно же товары, тру-вей - это разные базы, но получается что мне все равно хранить айдишники на товары в базе заказов? И где нибудь это дело собирать?

Denis
17.09.2018
11:38:38
Достаточно распространённая практика когда речь идёт о эвентах вроде лайка поста в соц сети

Sergey
17.09.2018
11:38:59

Denis
17.09.2018
11:39:13
Ну у них есть идентификация

Sergey
17.09.2018
11:39:14
у них нет жизненного цикла и в целом два ивента которые ссылаются на одно и то же события - являются одним и тем же


Денис
17.09.2018
11:41:47
Ну вот у меня есть таски для внешних сервисов. Таска - это объект из предметной области. Но так как таска выполняется внешним сервисом (через реббит) я решил, что буду регистрировать такие таски в специальном реестре и назначать им correlation_id (понятие из реббита), чтобы когда вернется ответ, мой консумер знал, что это ответ вот на эту конкретную таску. То есть такой себе реестр задач, каждый объект которого живет недолго, но уникален (идентифицируется по correlation_id). Этот реестр может быть использован не только для этих тасков в будущем.
И вот у меня два вопроса:
1. включать этот реестр в доменную область или он должен быть на инфраструктуре или вообще не придавать этому значения (ведь на самом деле в архитектуре нет четкого разделения на слои)?
2. правильно ли я вообще подошел к архитектуре в плане регистрации тасков, которые выполняются внешним сервисом?


Nik
17.09.2018
11:42:32
ну то есть это нормальный подход? опять же если очень упрощенно, отказаться от контроля за консистентностью на уровне СУБД, но получить плюсы от микросвервисной архитектуры аля масштабируемость и прочее? Или я что-то не беру в расчет?

Denis
17.09.2018
11:44:57
Жизни-то у них нет, что верно подмечено, но без идентификатора им никак чтобы всё правильно работало

Sergey
17.09.2018
11:45:58


Ihor
17.09.2018
11:49:44
VO не имеет жизненного цикла - интересно. Я всегда думал, что объект заканчивает жизненный цикл, когда отрабатывает деструктор (либо скрипт заканчивает свою работу)

Denis
17.09.2018
11:49:54
Но а как ты без идентификатора отдебажишь нормально?)
У них же по сути была зафиксирована жизнь, которая важна в твоём контексте. Сам факт того что этот эвент предшествовал предыдущему максимально критично
По мне просто определение VO это только иммутабельные объекты

Sergey
17.09.2018
11:50:48

Denis
17.09.2018
11:50:51
Любые мутабельные уже VO по своей сути называться не могут

Ihor
17.09.2018
11:51:25

Google

Denis
17.09.2018
11:52:08

Sergey
17.09.2018
11:52:14

Denis
17.09.2018
11:55:45
Почему при иммутабельности идентификация не может осуществляться по айди?
Твои эмейлы могут иммутабельны

Adel
17.09.2018
11:55:47
bool это тоже VO. Какой там жизненный цикл у него?

Sergey
17.09.2018
11:56:32
но в целом можно говорить о нем как о VO. просто это тупо)

Adel
17.09.2018
11:57:52
но позволяет прояснить некоторые моменты

Denis
17.09.2018
12:02:33
Энтити может быть иммутабельной?

Sergey
17.09.2018
12:07:40

Denis
17.09.2018
12:08:12
Мое мнение просто что если все данные делать иммутабельными, то черта между энтити и во почти отсутствует

Sergey
17.09.2018
12:08:37
Я привел пример - конкретная купюра никогда не поменяется

Denis
17.09.2018
12:10:40
Ничто никогда не поменяется по-хорошему, твой чек в магазине никогда не поменяется даже если продавец ошибся, он выпишет новый чек
То что было в конкретный отрезок времени не изменить

Adel
17.09.2018
12:11:05

Denis
17.09.2018
12:12:44
Если ты делаешь заказ, но товара нет на месте, сам факт того что ты сделал заказ уже был и его не отменить, ты делаешь новый заказ, а не меняешь старый
Тоже самое и с монетным двором в общем-то
Ага, зачеркнул, перечеркнул всё, наделал ошибок из-за того что надо пересчитывать налог...

Google

Denis
17.09.2018
12:18:50
И всё это вместо того чтобы с чистого листа проследовать четкой инструкции которую только что применял, и не стоит забывать что это в 2018 году абсолютно бесплатно))

[Anonymous]
17.09.2018
13:50:23
Всем привет

Артур Евгеньевич
17.09.2018
13:59:04
Привет

Aleh
17.09.2018
14:00:37