У нас есть приложение Ruby on Rails, которое становится довольно большим. И мы пытаемся разделить его на отдельные логические домены, и нам интересно, как обеспечить, чтобы логический домен не пересекался.
Допустим, у нас есть модели A, B, C, D. Модель A,B используются в одной части приложения, модель C, D в другой. Мы хотели бы иметь возможность нарисовать некоторые логические системные границы для более быстрой непрерывной интеграции и независимых групп.
Мы можем реорганизовать код и сломать некоторые зависимости.
ДляНапример, скажем, модель B - это таблица соединения или сопоставления, которая объединяет A и C в отношениях «многие ко многим»
class A
has_many :C, through: B
. Мы можем изменить это на:
class A
has_many :B
Из A вы получаете список c_id через таблицу отображения B, а затем вы можете вызвать GET API для C, чтобы получить список объектов C. Это похоже на то, как если бы мы были физически A и C в отдельных базах данных, и мы хотим отобразить список объектов C, когда мы показываем A.
В конце концов, мы, вероятно, захотим A, B в одном сервисеи C находиться в отдельном сервисе. В то же время мы хотим сохранить A, B, C в одной базе данных Postgres, но просто сделать логическое извлечение.
Вопрос: Как мы можем применять логическую системуграницы в Rails + Postgres, так что у нас нет членов команды, которые берут класс A, и случайно присоединяются к C, и вводят непреднамеренное соединение, прежде чем мы сделаем разделение на полное обслуживание.
Этот блог предлагает использовать наборы тестови выборочная загрузка необходимых зависимостей https://medium.com/@dan_manges/the-modular-monolith-rails-architecture-fb1023826fc4. Но я чувствую, что это может не помешать разработчику использовать SQL напрямую для объединения таблиц через логическую границу. Мне интересно, что могли попробовать другие.