Выбор ответа Middle Модульность обновлено

Циклические зависимости модулей

Вопрос

Модуль A зависит от B, а B от A. Что с этим делать?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Вынести общую часть в третий модуль или ввести интерфейс в одном из них и инвертировать зависимость. Gradle и SPM не допускают циклы между модулями.

Варианты ответа

  1. Ничего: Gradle и SPM разрешат цикл сами, собрав оба модуля за один общий проход компиляции без ошибок
  2. Объединить все модули проекта в один, раз граница между ними провела себя неудачно
  3. Вынести общую часть в третий модуль или ввести интерфейс в одном из них и инвертировать зависимостьправильный ответ
  4. Сделать оба модуля динамическими фреймворками: тогда символы разрешатся при загрузке

Разбор

Gradle и SPM не допускают циклы между модулями. Цикл говорит о том, что граница проведена неверно. Решения: выделить общий код (модели, контракты) в отдельный модуль или объявить интерфейс в нижнем модуле и реализовать в верхнем (инверсия зависимостей). Слияние всего в один модуль отменяет смысл модульности. Тип линковки цикл не решает.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.