Использование отдельного управления персоналом в ограниченном контексте (докладчики, председатели, авторы, участники) в управлении конференцией?

Мы создали приложение для планирования научной программы конференций, включая залы, сессии, лекции (устные или постерные доклады), спикеров, председателей и т. д. (планирование программы контекст).

Одной из важных частей являются научные статьи с указанием их авторов из представленных статей, которые также могут привести к лекциям или стендовым докладам.

Контекст управления бумагой — это отдельный ограниченный контекст, который использует внешний API для синхронизации данных между сторонними инструментами. Он действует как уровень защиты от коррупции (ACL) для контекста планирования программы.

Понятия спикера, председателя и автора имеют общий человек. Я хочу ввести отдельный контекст управления персоналом, чтобы сократить количество дублирующихся людей и повторно использовать уникальных людей в контекстах планирования программы и управления документами, используя уникальный идентификатор человека и отображая информацию через составной пользовательский интерфейс. Позже мы хотим интегрировать другой контекст регистрации конференции с той же логикой ACL для другого стороннего API.

Как я узнал из многих книг, блогов и т. д., только контекст управления людьми должен владеть данными человека и создавать новые экземпляры. Следствием этого будет создание нового лица для каждого автора (синхронный вызов API) при импорте всех данных из внешнего API управления бумагой или, альтернативно, использование одного пакетного вызова в начале.

Это соединение слишком высокое? Должен ли я хранить дублированные личные данные авторов в контексте управления бумагой? Это кажется неправильным и затрудняет дедупликацию.


person Matthias Fischer    schedule 04.03.2020    source источник
comment
Добро пожаловать в СО! Я думаю, вы могли бы повысить свои шансы на получение ответа, если просмотрите как задать вопрос и измените свой вопрос. Этот вопрос слишком широк.   -  person DCTID    schedule 04.03.2020
comment
спасибо и приятно быть здесь, я попытался немного сократить   -  person Matthias Fischer    schedule 04.03.2020
comment
Все дело в том, как вы определяете контекст для данных. Когда контекст данных отличается от дублирования, даже если некоторые значения совпадают. В службе управления бумагой вы будете хранить только данные об авторе, относящиеся к статье, возможно, его имя и возраст. В сервисе автора вы должны хранить соответствующие данные для описания автора, которые также включают имя и возраст, но контекст другой. Если вам нужна услуга человека, то вы описываете человека, а не автора. Хотя человек-работа теоретически может быть jobid, относящимся к автору.   -  person Nope    schedule 04.03.2020
comment
Данные автора, такие как isPresentingAuthor, isCorrespondingAuthor, должность и все институты, в которых автор работал над статьей, находятся в контексте статьи. Имя, E-Mail, ... будут только для отображения причин в бумажном контексте. Как я читал во многих статьях/книгах, данные дублируются в других контекстах, если контекст не может работать, не запрашивая другой сервис. Используя составной пользовательский интерфейс, вы по-прежнему можете выполнять всю работу, связанную с документом, например, изменить порядок авторов, изменить принадлежность, изменить автора-представителя в контексте документа. Если служба человека не работает, мы просто не можем отобразить имя. звучит так?   -  person Matthias Fischer    schedule 05.03.2020
comment
понятие Личности — нонсенс. В DDD человек играет роль в заданном контексте, то есть это либо спикер, либо участник, либо писатель, и ничего больше. Из того, что я читал, вы просто заботитесь о концептуальной идентичности этих понятий, и все. Иметь личность BC неправильно, на самом деле иметь классовую личность (в ОО) неправильно с философской точки зрения. Вы можете подумать, что все это пользователи, и поэтому заменить Person BC на User BC, но это тоже неправильно. Помните, что вы просто заботитесь о значениях кто есть кто в разных БК.   -  person Sebastian Oliveri    schedule 06.03.2020
comment
Спасибо. Тогда это Attendee BC, который занимается всеми авторами, спикерами, организаторами Конгресса, регистрантами и т. д.? Я хочу добавить новых авторов, спикеров и т. д. на основе всех участников/людей, которые уже присутствуют на конференции.   -  person Matthias Fischer    schedule 06.03.2020


Ответы (1)


Возможно, вы захотите пересмотреть свое использование DDD. Это может быть что-то более легко решаемое без ограничений DDD, потому что это звучит так, как будто у него много данных. Предполагая, что вы хотите сохранить DDD, вам нужно будет отделить свои контексты. Есть несколько способов отделить ваши контексты, но два моих любимых:

  1. События домена
  2. Отдых Апи

Вы можете инициировать событие домена после извлечения каждого автора, и это событие может быть обработано любым контекстом, в котором оно требуется. Вы можете использовать оставшийся API, куда вы можете отправлять данные автора, и он будет служить «службой приложений» для вашего второго домена.

Кажется, я понял вашу проблему/вопрос. Поправьте меня, если я не решил это или обратился к чему-то совершенно другому.

person Louis    schedule 04.03.2020
comment
Спасибо за ваш ответ. Я уже думал о событии AuthorCreated, и контекст человека может добавить нового человека в конференцию. Но тогда у меня возникает проблема, что этот человек может быть обновлен в контексте человека и в то же время в контексте управления бумагой. Оба сайта могут генерировать событие, например. PersonUpdated и Author Updated, которые могут привести к конфликту. Это помогает? - person Matthias Fischer; 04.03.2020
comment
Имейте в виду, что эти две сущности должны быть разными и зависеть от контекста. Их не должно быть много раз, когда их нужно синхронизировать. У них должна быть возможность изменяться и не влиять друг на друга, особенно если у вас есть четко определенный вездесущий язык и вы правильно определили свой контекст. Если синхронизация абсолютно необходима, ваш домен должен быть достаточно умным, чтобы разрешать любые конфликты. - person Louis; 04.03.2020
comment
Именно так и на общеупотребительном языке можно сказать, что автор - это человек, который пишет статью для разных институтов и может быть разного типа (докладчик, корреспондент, соавтор). Это было причиной того, что я выделил понятие человека. Как и в примерах электронной коммерции, где клиент в основном является только идентификатором в других контекстах, таких как доставка, но расширен, например. адрес доставки, который имеет значение только для контекста доставки. - person Matthias Fischer; 05.03.2020