Работа со сложными моделями чтения в распределенной архитектуре, управляемой проектированием на основе доменов и постоянством Polyglot - PullRequest
1 голос
/ 09 февраля 2020

У меня возникла дилемма, связанная с DDD (Domain Driven Design) .

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

  1. 1-й домен покрыт командой 1, которая выбрала решение для сохранения данных в наборе данных документа, например, MongoBD или ArangoDB
  2. 2-я команда отвечает за второй домен и основана на требования, которые они выбрали Elasti c Search.
  3. 3-я группа выбрала Oracle, который, как представляется, лучше всего подходит для последнего домена.

На протяжении реализации приложения растет потребность для сложных функций поиска, используя атрибуты, которые распределены в разных доменах, например:

Найти всю информацию, где DomainA.SomeInformation = "Filter 1" и / или DomainB.AnotherInformation = "Filter 2" и / или домен C .AnotherInformation = "Фильтр 3".

Примечания:

  • возможно, должна существовать сложная модель чтения, которая собирает всю информацию в рамках одной модели, например, с использованием CQRS - домены обмениваются информацией, например, по каналам сообщений, чтобы информация могла быть синхронизирована с преимуществом Read Models
  • s: приведенный выше случай позволяет ввести постоянство полиглота, каждая команда поставляет автономные модули
  • вызов: возможно, существует проблема с предлагаемыми ограниченными контекстами, и домены разделены неправильно.

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

1 Ответ

1 голос
/ 10 февраля 2020

https://youtu.be/CCX8Sox6BNQ?t=1430

Ознакомьтесь с некоторыми соображениями, как этого можно добиться с помощью Udi Dahan. Идея состоит в том, что каждый микросервис будет фильтровать данные, потому что данные принадлежат ему. Затем механизм (ниже) будет агрегировать ответы и составлять их обратно в пользовательском интерфейсе.

Если между данными происходит очень сложная логика c, то есть получать данные из службы A по фильтру, то если В результате получите данные A из службы B, если нет, то данные B из службы C, рассмотрите хранилище данных и методы поддержки принятия решений.

...