Комплексное веб-приложение для управления медицинскими юридическими залогами, предназначенное для отслеживания и мониторинга судебных дел, информации о клиентах и финансовых расчетов.
Общая структура:
Приложение построено на основе кастомного паттерна MVC (Model-View-Controller) с доменно-ориентированной организацией.
Ключевые архитектурные компоненты:
1. Паттерн Front Controller
В качестве фронт-контроллера используется файл index.php, который:
Загружает зависимости через Composer
Инициализирует конфигурацию
Разрешает зависимости через DiResolver
Маршрутизирует запросы через Router
2. Кастомный роутер
Класс Router отвечает за:
Разбор URL и маршрутизацию к соответствующим контроллерам
Проверку аутентификации
Рендеринг шаблонов
Внедрение зависимостей в контроллеры
3. Контейнер внедрения зависимостей
Класс DiResolver предоставляет:
Автоматическое разрешение зависимостей с использованием PHP Reflection
Внедрение зависимостей через конструктор
Поддержку как классовых, так и примитивных зависимостей
4. Шаблонный слой представления
Приложение использует простую систему шаблонов:
Шаблоны содержат плейсхолдеры в фигурных скобках {PLACEHOLDER}
Класс OutputBuilder загружает шаблоны и подставляет значения
Контроллеры возвращают массивы данных, которые объединяются с шаблонами
5. Доменно-ориентированная организация
Бизнес-логика разделена по доменным сущностям:
Attorneys (Адвокаты)
Lawfirms (Юридические фирмы)
Lien (Залоги)
Login (Авторизация)
Paralegals (Помощники юристов)
Patients (Пациенты)
Procedures (Процедуры)
Users (Пользователи)
Reports (Отчёты)
Export (Экспорт)
Каждый домен включает:
Контроллер (обработка HTTP-запросов)
Модель (бизнес-логика и доступ к данным)
Шаблоны (HTML-представления)
Паттерны проектирования и подходы реализации:
1. Паттерн Singleton
Используется для управления подключением к базе данных через trait DBInstance
Гарантирует единственный экземпляр подключения
Предоставляет статический доступ к БД
2. Паттерн «Фабрика»
Реализован в DataTableFactory
Создаёт соответствующие объекты таблиц данных по типу
Централизует логику создания объектов
3. Паттерн «Стратегия»
Используется в реализациях таблиц данных
Разные классы реализуют интерфейс DataTableInterface
Позволяет взаимозаменяемые стратегии форматирования данных
4. Паттерн «Шаблонный метод»
Применяется в базовой структуре контроллеров
Общие методы: inject(), action(), output()
Подклассы реализуют специфичное поведение
5. Паттерн Repository (частичная реализация)
Модели выступают в роли репозиториев доменных сущностей
Инкапсулируют логику доступа к данным
Предоставляют доменно-специфичные методы
6. Паттерн Front Controller
Централизованная обработка запросов через index.php
Единая инициализация и конфигурация
Ключевые компоненты и их взаимосвязи
Базовая инфраструктура
Router — центральный диспетчер запросов
DiResolver — контейнер внедрения зависимостей
Слой БД — доступ к данным через Delight-im/DB
Система вывода — рендеринг шаблонов
Доменные компоненты
Controllers — обработка HTTP-запросов
Models — бизнес-логика и работа с БД
Templates — HTML-шаблоны с плейсхолдерами
Аутентификация и авторизация
Используется библиотека Delight-im/Auth
Ролевой доступ (SUPER_ADMIN, MANAGER)
Управление сессиями и паролями
Интересные особенности:
Гибкая шаблонная система
Ролевой контроль доступа
AJAX-таблицы данных
Валидация форм на сервере и клиенте
Автоматическое внедрение зависимостей
Централизованное управление конфигурацией
Технологический стек
Backend:
PHP 7+
MySQL
Delight-im/DB
Delight-im/Auth
PHPMailer
vlucas/phpdotenv
Frontend:
Bootstrap 4
jQuery
DataTables
jQuery UI
jQuery Validation
Font Awesome, Material Icons
Безопасность:
Проверенная библиотека аутентификации
Ролевой доступ
Санация входных данных
Защита от SQL-инъекций
XSS-защита через шаблоны
CSRF-защита явно не реализована
Масштабируемость:
PDO и подготовленные запросы
Отсутствие кэширования
Стандартные PHP-сессии
Нет встроенного балансирования нагрузки
Поддерживаемость:
Доменно-ориентированная структура
Слабая связанность компонентов
Разделение логики и представления
Конфигурация по окружениям
Централизованная обработка ошибок