Мое программное обеспечение — это своего рода социальная сеть, участники которой могут, помимо прочего, планировать некоторые встречи между собой.
Я решил выделить эти три ограниченных контекста (DDD):
- IdentityAndAccessContext, в основном связанный с аутентификацией/авторизацией пользователя.
- SocialContext, касающийся Участников и всей социальной информации о них; свои интересы и т. д., как классическая социальная сеть.
- MeetingsContext, относящийся к встречам между некоторыми участниками. Мы говорим о переведенных Объектах Ценности как Создателях/Посетителях/Участниках и т. д.
По сути, в MeetingsContext вариант использования создания собрания требует список участников (чтобы пригласить некоторых из них), в основном через веб-форму, где пользователь выбирает некоторых участников, представляя некоторую интересную, но легкую социальную информацию. .
Как вы уже могли догадаться, SocialContext, несомненно, является основным источником данных об участниках в социальном плане.
Должен ли я создать своего рода Открытую службу хоста в SocialContext, возвращающую некоторые важные данные участников для варианта использования?
Он будет использоваться MeetingsContext напрямую (протокол REST), возможно, при необходимости через уровень защиты от коррупции.
Или лучше кэшировать или даже дублировать данные соответствующих участников в MeetingsContext, чтобы улучшить его автономный аспект?
При использовании решения для кэширования кеш будет синхронизироваться с обеспечением согласованности в конечном итоге.
Что является хорошей практикой в этом случае?
IdentityAndAccessContext
вообще не является ограниченным контекстом или доменной концепцией. Идентификация и доступ (авторизация, аутентификация, ACL и т. д.) являются проблемами приложения, а не проблемы домена, которые должны обрабатываться на уровне приложения, а не на уровне домена. - person Tseng   schedule 05.09.2017SocialContext
с идентификаторомxyz
, и за это явно отвечает приложение, а не не домен. - person Tseng   schedule 05.09.2017SocialContext
Person
илиEmplyoee
находятся сущности/агрегаты домена. Вы не можете заблокировать сотрудника, это нигде не является частью бизнес-процесса. Вы можете просто назначить (группе/арендатору/компании/и т. д.)/удалить/удалить его. Идентичность — это совсем другое. Личность (в простейшем случае) может состоять только из имени пользователя, логина и связанного с ним идентификатора (т. е. идентификатора человека), поэтому вы можете сказать: он/она подтвердил, что он/она является этим человеком. Ничего лишнего, никакой бизнес-логики, все дело в приложении. - person Tseng   schedule 06.09.2017Person
илиEmplyoee
) и т. д. Все это не бизнес-процессы, следовательно: не доменная логика. Все они довольно специфичны для приложения. - person Tseng   schedule 06.09.2017Person
иUser
в одном контексте, и только он может сказать, почему. Упрощение для книги/примера?Person
илиEmployee
подходят в качестве объекта домена, поскольку они описывают объект, являющийся частью бизнес-процесса.User
на самом деле нет. Лично я бы убрал из негоUser*
,AuthenticationService
иPasswordService
, а также аутентификацию. - person Tseng   schedule 06.09.2017Someinterface.canAccess(personId, "someClaimOrPermission")
, и приложение может реализовать этот интерфейс с помощью этого метода. Таким образом, домен не будет знать о таких понятиях, как утверждения. Роли могут быть приемлемыми, в зависимости от проблемной области (т. е. роли распространены в бизнес-процессах, например, менеджер, служба поддержки и т. д.). Но в деталях реализации (на прикладном уровне) роль может быть представлена как набор требований. Домену не нужно знать об этой детали инфраструктуры - person Tseng   schedule 06.09.2017