Нам надоело! Переезжаем на монорепозиторий

Не потому, что монорепозиторий моднее. Просто в какой-то момент несколько репозиториев начинают создавать больше проблем, чем решать.

Рассмотрим типичный случай: библиотека живёт в отдельном репозитории, собирается в артефакт, приложение подключает конкретную версию. Меняем библиотеку — публикуем новый артефакт, обновляем версию, снова собираем. И так по кругу.

Пока компонентов немного, это отлично работает. Но когда их становится много, появляется отдельный слой инфраструктуры: публикация артефактов, синхронизация версий, разные состояния dev и master, дополнительные этапы CI и ошибки на стыках между репозиториями.

В какой-то момент возникает простой вопрос: «Зачем вообще держать эти компоненты в разных репозиториях, если они развиваются как части одного продукта?».

Монорепозиторий позволяет оставить модульность, но убрать лишнюю границу между репозиториями. Каждый компонент остаётся отдельным Gradle-модулем со своим API и внутренней реализацией, но всё находится в одном графе зависимостей и собирается из одного состояния исходников. При этом монорепозиторий не означает «один огромный модуль». Наоборот, смысл как раз в том, чтобы сохранить хорошие границы внутри одного репозитория.

И здесь есть ещё один интересный момент. Отдельный репозиторий часто появляется по вполне реальной причине: другой владелец, другой уровень доступа, несколько независимых потребителей или отдельный цикл релизов. Но со временем причина может исчезнуть, а граница остаться. И тогда то, что когда-то было архитектурным решением, превращается просто в историческое наследие.

Поэтому перед созданием очередного репозитория полезно спросить себя: «Какую конкретную проблему он решает, и действительно ли эта проблема всё ещё существует?».

Если нет, возможно, пора оставить модули, но убрать репозитории.

#архитектура #android #репозиторий #модульность

Нам надоело! Переезжаем на монорепозиторий | Сетка — социальная сеть от hh.ru