@6epcepk

Архитектура размещения файлов при разработке Javascript + PHP: Frontend + Backend?

Добрый день.
Решил немного переписать свой велосипед. Все делаю по принципу package-by-feature.
Так как пишу бэк и фронт, то встал вопрос как это все красиво организовать по директориям.

Структура проекта JS:

├── public               # Публичная директория
│   ├── assets           # Симлинк на src/assets ?
│   ├── index.js         # Бандл js
│   └── index.css        # Бандл css
├── src                  # 
│   ├── assets           # Директория для ресурсов fonts, images etc.
│   ├── js               # Директория для js
│   │  ├── components    # Директория для ядра и модулей
│   │  │  ├── app.js     # 
│   │  │  └── moduleX.js # 
│   │  ├── plugins       # Директория для плагинов
│   │  │  ├── drawer.js  # 
│   │  │  └── pluginX.js #
│   │  ├── utils         # Директория для утилит
│   │  │  └── utilX.js   # Утилита Х
│   │  ├── index.js      # Точка входа для js
│   └── scss             # 
└── node_modules         # npm


Соответственно на момент разработки js работает по ESM.
На продакшене - билд в /public тем же webpack.
/src/js/components - тут модули.
Данная структура отлажена, вопросов нет.

Но что делать с php?

В моем понимании модуль:

├── ModuleX              #
│   ├── Controller       #
│   ├── Model            #
│   ├── Service          #
│   ├── Template         #
│   ├── js               # 
│   │   └── index.js     #
│   ├── scss             #
│   └── assets           #


То есть инкапсулированная бизнес-логика и представление в отдельный модуль, DDD архитеуктура.

ВОПРОС: как объединить js и php с учетом модулей, если пишешь и front- и back-end.
ВОПРОС2: где логично хранить разные шаблоны для одного домена.
ВОПРОС3: где логично хранить данные по разным доменам при мультисайтовой системе (шаблоны, ресурсы и тд).

Так же немного подглядел архитеуктуру в разных фреймворках.

Структура с примера пользователя хабр:

├── config               # Директория для конфигов
├── Framework            # Взято с примера пользователя хабр
├── Module               # Взято с примера пользователя хабр
├── public               # Публичная директория
│   └── index.php        # Точка входа php
└── vendor               # composer


Структура Zend:

├── config               #
├── module               #
│   └── Application      #
├── public               # 
│   └── index.php        #
└── vendor               #


Структура Laravel:

├── app                  #
│   ├── Http             #
│   ├── Models           #
│   └── ...              #
├── bootstrap            #
├── config               #
├── bootstrap            #
├── public               # 
│   └── index.php        #
└── resources            #
└── routes               #
└── vendor               #


Структура Symfony:

├── assets               #
├── config               #
├── public               # 
│   └── index.php        #
└── src                  #
│   ├── Controller       #
│   ├── Twig             #
│   └── ...              #
└── templates            #
└── vendor               #
  • Вопрос задан
  • 227 просмотров
Пригласить эксперта
Ответы на вопрос 1
Во времена микросервисов, ответ на 1 и 3 это разные репозитории. Но чтобы не коммитить одну таску несколько раз, можно все запихнуть в монорепу.

По внутренней структуре, лучше делать стандартно, и на фреимворках
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы