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