Допустим, есть CMS, созданная с помощью Laravel. Мы будем предоставлять различным клиентам ту же CMS, обновлять их CMS при каждом выпуске, который мы создаем, но у нас есть файл конфигурации, который будет определять, какие функции доступны для каждого клиента. Весь бэк-офис (панель администратора и т. Д.) Будет в основном статичным и будет использовать Vue только для определенных динамических элементов. Это решение удовлетворяет наши потребности, когда дело доходит до серверной части.
Однако мы планируем развертывать различные интерфейсы конечных пользователей для каждого из этих клиентов. Разъединить эти звуки очень просто (создайте совершенно отдельный проект внешнего интерфейса и используйте конечные точки API для динамического извлечения и рендеринга всего), но если бы мы полностью отделили внешний интерфейс и внутренний интерфейс, мы потеряли бы возможность рендеринга статических страниц с помощью Laravel Blade, и нам нужно эта функция для определенных страниц из-за скорости рендеринга, времени загрузки, SEO и т. д.
Основной вопрос: как отделить интерфейс от бэкэнда для каждого клиента, не теряя возможности отображать страницы с помощью Laravel и Blade, сохраняя при этом простоту разработки и тестирования?
Одним из решений, которое приходит мне в голову, является создание шага после сборки, в котором мы «объединяем» файлы клиентского интерфейса в CMS, но это усложнит процесс разработки или даже сделает все это практически невозможно разработать и испытать.
Второе решение, которое приходит мне в голову:
- Храните все в одном Git-хранилище.
- Разрабатывайте CMS в собственной ветке и разрабатывайте только бэкэнд и бэк-офис для этой ветки и ее дочерних элементов.
- Создание отдельных веток ( Какова лучшая практика для помещения нескольких проектов в репозиторий git? Возможно, некоторые из представленных здесь решений?) Для различных интерфейсов конечного пользователя и разработка только интерфейса конечного пользователя на эти ветви.
- Слияние ветки CMS с ветками клиента при каждом выпуске.
Это решение кажется жизнеспособным и позволит нам использовать Laravel Mix и рендеринг на стороне сервера, но оно очень подвержено человеческим ошибкам и очень усложнит отслеживание этих ветвей через некоторое время. Одно из других потенциальных решений, о которых я читал, - это использование подмодулей Git, но мне просто трудно понять, как это работает, и кажется, что это не так гибко, как должно быть в этом случае использования.
Что было бы для нас лучшим архитектурным решением?