Многое было сказано против и в пользу каждого варианта. Обсуждение кажется висцеральным, как вкладки против пробелов.
Мы не можем найти среднюю землю между двумя?
Никто не любит, чтобы не любить Repo размером с 30 ГБ, с 200 разработчиками, находящимися в зависимости от комминтов, с 1000+ ветвями, 10+ языками и множеством несовместимых насадочных инструментов.
В то же время очень расстраивается, необходимость постоянно переключаться между 20 различными репоим за один день, открывая и закрывая еще 20 сопоставленных PR, в то время как публикуют 10 различных библиотек, просто получите вашу блестящую новую кнопку в интерфейс.
Как вы играете на хороший баланс между двумя?
(FYI, мои вопросы не риторика, я действительно спрашиваю)
Я склонен думать, что «охват» репо было привязано к двум, иногда противоречащим, размерам:
- Границы собственности
- ограниченные контексты
Репо границей собственности
Наличие единого репо для всего кода, принадлежащего одной команде, очень практично, и «команда», я имею в виду группу ~ 10 разработчиков, работающих вместе на одном и том же отступлении.
Он никогда не будет расти до размера «Mega Repo» (если ваша команда не состоит из 10x разработчиков, работающих 24×7 часов 😉), поэтому вы не должны бить никаких пределов VCS.
Ваши взаимодействия репо (PRS, проблемы, ветвящиеся, этикетки и т. Д.) могут отражать инструмент рабочего процесса для команды, а не под угрозу рабочего процесса, который соответствует всей компании.
Стек/набор инструментов репо следует (?) Быть относительно сплоченным, так как он содержит только вещи, выбранные членами команды.
Последнее, но не менее важное, если вы живете по «вы построите его, вы запускаете его« девиз, все рабочие процессы CI/CD будут очень хорошо поместиться в объеме этого уникального репо.
Репо ограниченным контекстом
Представьте себе относительно простую подсистему внутри вашей компании, состоящую из веб-интерфейса, слоя API и услуг пары работников. Все вышеперечисленное, хорошо организованное для выполнения искренних задач (как @Alxgrk Опубликовано в комментариях, концепция очень хорошо объяснена DDD как ограниченный контекст ).
Наличие всех компонентов в уникальном репо, позволяет нам выдвигать новые функции, которые пропалагают изменения всех слоев в одном сплоченном и самостоятельном пиар.
Если вам нужно что-то изменить в ваших контрактах API, тот же PR будет включать в себя изменения в слой Frontend, который потребляет API, и изменения рабочих, которые выполняют фактическую задачу. Очень легко визуализировать, просматривать и соответствовать вашей умственной модели в целом.
Как бонус, ваши рабочие места трубопроводов развертывания (означающие, что тест, QA, Rollout и т. Д.) будут иметь отношение 1: 1 с вашим PRS. Ницца для изменяемых моментов, потрясающих для обработки процедур.
К сожалению, эти два габарита не всегда идут в руку. Например, когда компании разделили своих разработчиков между командами Frontend и Backend (очень распространенный пример независимых команд, управляемых очень связанными компонентами).
В идеальном мире ваша команда имеет полную собственность по поводу сплоченного набора компонентов, в сочетании между собой столько же, сколько они хотят, но очень слабо сочетаются с внешним миром. При этом предположении я бы, безусловно, предпочитал один репо, чтобы управлять всеми компонентами команды.
Разве ты не будешь?
Оригинал: «https://dev.to/scarmuega/finding-middle-ground-between-monorepo-and-polyrepo-kif»