О проекте
Архитектура приложения
🏗️ Многоуровневая архитектура
Приложение построено по принципу Layered Architecture с чётким разделением ответственности:
- Domain — чистая бизнес-логика и модели данных
- Delivery — контроллеры и маршруты (Web/API)
- Persistence — доступ к данным и репозитории
- Presentation — шаблоны и статические ресурсы
🧩 Компонентная система
Component-based архитектура позволяет модульно расширять функциональность:
- Компоненты регистрируются в центральном реестре
- Управляются через ComponentManager
- Автоматически инициализируются в правильном порядке
- Примеры: MenuComponent, LayoutComponent, AuthComponent
🎯 Система контекста (ctx)
Единый структурированный контекст обеспечивает доступ к данным во всех шаблонах:
ctx.menu— навигационные меню разных типовctx.app— состояние приложения и компонентовctx.user— данные аутентифицированного пользователя- Контекст безопасен и автоматически фильтрует данные
📍 Placement Manager
Динамическая система размещения компонентов в layout:
- Компоненты регистрируются в определённых областях (NAVBAR, SIDEBAR, FOOTER)
- LayoutComponent управляет конфигурацией размещений
- Шаблоны получают компоненты через
placement_manager - Позволяет гибко настраивать интерфейс без изменения кода
🔄 Автоматическая инициализация
Конфигурация
- Загрузка из config.json + ENV переменных
- Маскировка секретных данных
- Точечный доступ через DictWrapper
Компоненты
- Авторегистрация из реестра
- Dependency Injection конфигурации
- Контроль порядка инициализации
Маршруты
- Автоматическая регистрация Blueprints
- Разделение на Web и API интерфейсы
- Health-check эндпоинты
📁 Файловая структура
flask_app/
├── app/
│ ├── core/ # Ядро системы (контекст, ошибки, расширения)
│ ├── components/ # Компонентная система
│ ├── domain/ # Доменная логика и модели
│ ├── delivery/ # Контроллеры и маршруты
│ ├── persistence/ # Доступ к данным
│ ├── templates/ # Шаблоны Jinja2
│ └── static/ # Статические файлы
├── config/ # Конфигурация приложения
├── logger/ # Система логирования
└── run.py # Точка входа
Продолжая использовать сайт, вы соглашаетесь на обработку файлов cookie и принимаете Пользовательское соглашение