Существуют ли подходы для правильного использования EF + DDD в архитектуре микросервисов? - PullRequest
0 голосов
/ 21 января 2019

Я прочитал много тем о том, как заставить ef core + ddd работать вместе, но они показывают только пример, где у нас есть только один микросервис.Я застрял с решением о размещении EF Core + DDD там, где его больше, чем один.Например, у нас есть 1 база данных и 2 микросервиса (личность, расписание).В каждом сервисе мы должны держать свой ограниченный контекст.Сервис Identity работает только с таблицами User, Role, ... ... С другой стороны, сервис расписания работает с User, Appointment и т. Д. Также, когда мы разрабатываем модель домена, мы используем только те свойства, которые нам нужны.Таким образом, в службе назначения для сущности пользователя мне нужно использовать, например, Id, NameDetails, Address, ContactInfo, когда в службе идентификации я использую электронную почту, пароль и т. Д. Вопрос заключается в следующем: должен ли я использовать различный контекст БД для каждого микросервиса?Если да, то как мне в этом случае справляться с миграциями?

1 Ответ

0 голосов
/ 21 января 2019

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

Если вам нужно ссылаться на user-id, например, в двух службах, этот идентификатор будет храниться только в том случае, еслиэто целое число, строка или любой другой тип ключа.

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

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

Если вы по-прежнемуЕсли вы хотите использовать одну и ту же базу данных, вы можете создать множество DbContexts , которые фактически указывают на одну и ту же базу данных, но определяют только набор сущностей.

В общем, существуют разные уровнидомен привод-дизайн.Вы можете сделать доменное проектирование без микросервисов и даже без распределенных систем.Ключевые слова, такие как Aggregates, Commands и Events, Distributed Systems, являются частью domain-driven-design.

Некоторые ресурсы, которые можно прочитать о domain-driven-design

https://stackoverflow.com/a/1222488/5397642

https://martinfowler.com/bliki/DDD_Aggregate.html

https://medium.com/withbetterco/using-aggregates-and-factories-in-domain-driven-design-34e0dff220c3

https://dev.to/designpuddle/apps--microservices--what-you-need-to-know-autonomy-and-the-challenges-you-will-face-39e1

...