Как модульно устроить мобильное приложение
Вопрос
Расскажите, как вы делите приложение на модули.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Цели: скорость сборки, границы, параллельная работа команд
Типы: app, feature (api/impl), core, тестовые утилиты
Правила зависимостей: фичи не зависят от реализаций друг друга, нет циклов
Навигация между фичами через интерфейсы и DI
Контроль графа и времени сборки
Платформенные детали: SPM/статическая линковка на iOS, Gradle на Android
Что могут спросить следом
- Сколько модулей это слишком много?
- Как вы проверяете, что правила зависимостей не нарушаются?
Разбор
Модули нужны для трёх вещей: быстрой инкрементальной сборки, явных границ и параллельной работы команд. У нас app-модуль собирает приложение и склеивает зависимости. Фичи разделены на api с интерфейсами и точками входа и impl с реализацией. Core-модули содержат сеть, хранилище, дизайн-систему и аналитику, они стабильные и маленькие. Правило: фича зависит только от core и api других фич, никогда от impl, и циклов нет, это проверяется на CI. Переходы между фичами идут через интерфейсы навигации, реализации подставляет DI. На iOS модули это локальные SPM-пакеты со статической линковкой, на Android Gradle-модули с convention plugins. Регулярно смотрю на граф и время сборки: если всё пересобирается от каждого изменения, значит, какой-то модуль стал свалкой.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Модуляризация монолита без остановки разработки
Следующий вопрос
Зачем делить приложение на модули
Ещё по теме «Модульность»
- Почему сборка не ускорилась после модуляризации
- Что выносят в core-модули
- Циклические зависимости модулей
- Зависимость фичи от фичи
- Инструменты модуляризации на Android
- Инструменты модуляризации на iOS
- Типы модулей мобильного приложения
- api и implementation в Gradle