Стоит задача написать бэкенд для сайта, работающего на две разные страны. На 90% между ними все идентично, но 10% составляет некоторая региональная специфика. Сейчас бэкенды работают как два независимых репозитория (один форк другого). Никакого переиспользования кода нет, и они расползаются все дальше и дальше друг от друга, либо приходится делать каждый раз двойную работу по накатке одинакового функционала.
Не хочется в процессе переписывания угодить из одной ямы в другую, потому прошу совета, как лучше организовать переиспользование кода, сохраняя общую архитектуру и правила, но оставляя пространство для локальных маневров.
На ум приходит несколько вариантов:
- Один репозиторий - один сервер, одна БД. Тут проблема с потенциальной невозможностью кастомизации. Код должен 100% удовлетворять требованиям обоим бизнесов;
- Один репозиторий - два сервера. Здесь некая кастомизация конфигами, но в целом то же самое;
- Два репозитория - два сервера. Общее вынести в пакеты.
Последний вариант видится наиболее перспективным. Но это легко на словах, сложнее на деле. Что выносить в пакеты и по какому критерию? Основные модели, контроллеры, routes, events, listeners, а локально наследоваться от них? Как быть с миграциями?
Потом раз основная работа общая для обоих проектов, то и обновляться в основном будут именно эти общие пакеты. Т.е. каждый пуш в этот общий репозиторий должен запускать деплой обоих сайтов с последующим `composer update`?
Поделитесь опытом, кто делал нечто подобное.