Наследование в движке rails, находящемся внутри приложения rails - PullRequest
0 голосов
/ 18 июня 2020

У нас есть уже очень сложный проект функциональных рельсов. У нас есть запрос на другое вспомогательное приложение, которое должно быть полностью отделено от проекта rails, за исключением нескольких моделей, которые должны быть почти такими же. Настроил движок, смонтировал трассы, работает очень хорошо и как хотелось. Однако, когда дело доходит до тестирования, я понятия не имею, как это сделать, поскольку я даже не могу сгенерировать манекен rspe c, поскольку у меня постоянно возникают проблемы с зависимостями от исходного приложения rails, особенно с моделью User - поскольку я унаследовал его от приложение rails.

require_dependency "../../../app/models/user"

module VendingApp
  class User < ::User
    ...
  end
end

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

Может быть, загрузить все приложение + движок rails в качестве фиктивного? Но как бы вы это сделали?

1 Ответ

0 голосов
/ 18 июня 2020

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

Когда вы работаете с несколькими сервисами с одной и той же моделью, нормально иметь дублирование кода, чтобы не связывать ваши сервисы вместе. Наличие одной службы, которая «наследуется», - это еще один способ сказать: «Я связываю свою службу A с B». Тот факт, что вы не можете протестировать свой сервис A, - это просто запах плохого дизайнерского решения.

Если вы хотите быть еще БОЛЕЕ элегантным, вы можете использовать простые Ruby объекты для определения ваших моделей, и затем используйте класс адаптера / репозитория, чтобы загрузить их из ActiveRecord. Это подход, вдохновленный DDD, вы можете увидеть пример в этом репозитории https://github.com/paulrayner/ddd_sample_app_ruby

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