А можно про это по подробнее?
>- Разграничение контекстов и общение между контекстами через контракты
Bounded contexts. Суть в том, что сущности из реальной жизни слишком многогранны и сложны, чтобы их отразить в коде вменяемым образом. Идея разграничения контекстов заключается в том, чтобы разбить твое большое приложение на логические модули. В каждом модуле у тебя, например, будет существовать юзер. Только в модуле настроек приватности у него будет один набор свойств (настройки того, кто ему может писать, смотреть страницу и тд), а в модуле переписки совсем другой (собеседники, список диалогов, сообщений и тд).
Так вот твои сущности (юзер в данном примере) дробятся на проекции по одной на каждый такой контекст.
Далее, по поводу общения через контракты:
Внутри таких контекстов у тебя есть всякая мудреная логика, проверка бизнес правил и прочего говна. Так вот, чтобы это случайным образом не нарушить и не обойти, один контекст (например, месседжинг) при обращении к другому (например, приватность) должен общаться через самый верхний слой того контекста, т.е. контракт. В противном случае будет дублирование логики внутри разных контекстах и баги, как неизбежное следствие.