Допустим, модуль заказов напрямую читает таблицы доставки. Теперь изменение схемы доставки может сломать заказы, хотя в коде всё красиво разложено по модулям.
Границы стоит закреплять и в базе:
• Отдельная схема и роль PostgreSQL для каждого модуля.
• Роль получает права только на свои данные.
• В EF Core каждому модулю выделяется собственный
DbContext и подключение с его учётными данными.• Чужие данные доступны через API, события или специально опубликованные представления с правами только на чтение.
Так случайный запрос к чужой таблице остановит сама база. А выделять модуль в отдельный сервис впоследствии будет проще.
Нюанс: отдельная схема и
search_path сами по себе доступа не ограничивают. Границу обеспечивают права ролей на схемы и объекты.https://milanjovanovic.tech/blog/how-to-keep-your-data-boundaries-intact-in-a-modular-monolith
