Обеспечение границ логических моделей в больших приложениях Ruby on Rails - PullRequest
1 голос
/ 24 октября 2019

У нас есть приложение 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 напрямую для объединения таблиц через логическую границу. Мне интересно, что могли попробовать другие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...