212 похожих чатов

Добрый вечер. Недавно прочитал синюю книжку Эванса, осталось пару вопросов.

Если кто-то сможет ответить - буду благодарен.
1) В книге упоминается shared kernel. Есть ли кейсы, когда туда помещается что-то помимо инфраструктурных реализаций, либо VO? И собственно вопрос в ту же сторону. В 2 контекстах допустим VO "сумма", которая не может быть мешьше 100. Все ок, пока не приходит еще один контекст, где инвариант "Суммы" становится < 200. Правильно ли, что тогда этот VO убирается из shared kernel'а и помещается в каждый контекст отдельно? Тут скорее переформулирую: если что-то упоминается в shared kernel, то оно во всех контекстах должно однозначно определяться, а не в нескольких только?
2) Про общения между контекстами немного остались непонятны различия между трансляцией и антикоррапшном. Правильно ли утверждение, что антикоррапшн - это когда чужой контекст не знает о тебе ничего, однако ты делаешь "обработку" в свой "нужный домену" формат. А собственно трансляция - это когда 2 контекста знают друг о друге и вместе собственно строят эту самую связь. По сути с точки реализации "транслятор" - это acl'ы с двух сторон, грубо говоря?

1 ответов

20 просмотров

shared kernel - как и все "общие" вещи должен быть максимально тонким. Что именно - решать командам которые работыют над разными контекстами. Как правило это какие-то общие понятия которые позволяют вам "линковать" контексты между собой. Типичный пример - какие-нибудь VO для идентификаторов. Скажем UserId или ProductId какой. То что обозначает идентификатор "большой" бизнес-сущности на который будут ссылаться ее части из разных контекстов. На тему DTO в shared kernel - опять же часто бывают какие-то типичные штуки типа дэйт рэйджин и т.д. которые "почему бы не сложить вместе", но лучше выбирать стратегию "выносить в общий кернел только то что встречается в разных контекста больше чем 2 раза, и только если вы уверены что концепт достаточно простой и не будет меняться по своим причинам". То есть вот "сумма" про которую ты говоришь - я бы по умолчанию воспринимал такие вещи как что-то что должно быть строго в своих контекстах и т.д. Еще хороший кейс для shared kernel - это скажем доменные ивенты которые используются для интеграции (то что у Фаулера в классификации event driven как event notification). причем шаред кернел не обязательно обязан быть прям кодом и модулем приложения, это может быть просто набор контрактов для grpc например или там еще какая asyncapi спека. Например если ты упарываешься по микросервисам. Важно - это маленький сабсэт всех доменных ивентов в системе. Цель shared kernel - больше не "реюз кода" а скорее общие элементы контракта которые вы хотите иметь между контекстами. На тему транслейшенов и anti corruption layer. Для начала анти коррапшен лэйер это та штука которая занимается трансляцией, то есть такой слой адаптеров который позволяет линковать "внешние" контексты и твои контексты. Хорошо сочитается с интеграцией с внешними системами или когда есть легаси части которые еще не распилили. Тут ключевой момент - контроль за изменениями. Если контроль не с твоей стороны то ACL тебе нужен просто что бы защитить модель от возможных изменений чужой модели. То есть это не про "две команды которые работают над своими контекстами" а прям "две организации или две принципиально разные модели которые могут меняться независимо".

Похожие вопросы

Обсуждают сегодня

Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
как быть с принтером? такой подход прокатит?
zamtmn
12
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
А вот это что за конструкция? Вернее, она тут нафига?
Serjone
10
Привет. Подскажите, как правильно сматчить лист фиксированного размера, чтобы компилятор не говорил мне о неполном паттерне? Допустим что-то такое [x', y'] = sort [x, y]?
Arseny
8
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
Мужики. привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных элементов...
Kraszx
2
Карта сайта