Свои пять копеек.
Конкретно из текущей ситуации в реальном проекте, на данный момент, его значимость не особо высока, но уже за это получаю деньги.
Так сказать инвестиция в развитие.
На протяжении года занимаюсь проектированием собственного фреймворка, есть некие достижения.
Сразу оговорюсь, я тоже использую сторонний код.
В частности я использую Doctrine ORM и ряд других компонентов от Symfony и других.
Например роутинг свой, загрузка сервисов своя...
Очень много сил потратил, а заказчик средств.
Фреймворк уже готов.
При разработке столкнулся с рядом проблем, как раз с дублированием кода.
Да, эта проблема частично решена.
Например:
Сущности, и репозитории сущностей - это общий код для всех окружений.
Окружений может быть сколько угодно.
На данный момент использую два окружения
Admin
Api
admin.mysite.com
api.mysite.com
mysite.com - например фронт вообще на NUXT
У окружений есть общий конфиг
Общие языковые пакеты с ленивой загрузкой
Вот так выглядят контроллеры в своих окружениях
В принципе нет кода который пишется только для конкретного окружения, исключением являются контроллеры и загрузчики приложения.
Точек входа всегда ровно количеству окружений, но загрузчик приложения один
Код файла запуска приложения
<?php
define('ENV', basename(__DIR__));
require '../../engine/bootstrap.php';
В контроллере у каждого окружения могут быть дублирующие методы
Для себя выделил неформальное определение
Функции, модули которые решают одну и туже задачу для всех окружений, выношу в отдельную папку
Визуально это выглядит так