Оригинал: Upgrade your PHP projects using these tools & tips
Перевод для канала Мы ж программист
Экосистема PHP полна инструментов, которые помогут вам писать лучший код и создавать более надежные проекты, используйте их!
За годы работы в качестве PHP-разработчика мне довелось работать с самыми разными командами, архитектурами и рабочими процессами.
Во всех этих проектах неизменными оставались несколько вещей: стандарты, инструменты и процессы.
Давайте рассмотрим некоторые рекомендации для ваших PHP-проектов!
Используйте статические анализаторы (PHPStan, Sonar)
Один из инструментов, который действительно изменил мою работу в качестве PHP-разработчика, – это PHPStan (Sonar также можно использовать, но не так легко). Для тех, кто не знаком, PHPStan – это статический анализатор кода, который читает ваш код и вылавливает потенциальные ошибки до того, как они попадут в производство.
Он проверяет такие проблемы, как типы данных и структуры массивов (например, пустые переменные), помогая выявить ошибки на ранней стадии.
Рассмотрим распространенный пример:
<?php
// In the context of a Repository
function getUser(int $id): User
{
// Retrieve the user, somehow
}
// ...
// In the context of a Controller
$payload = $request->deserialise(UserUpdateModel::class);
$user = $this->userRepository->getUser($payload->userId);
Если $payload->userId
содержит null
, этот код может вызвать 500 Internal Server Error и сломать приложение.
PHPStan обнаружил бы эту потенциальную проблему во время разработки – запуск приложения не требуется!
Обеспечение единого стиля кода (PSR-12)
Соблюдение единого стиля кода очень важно для обеспечения читаемости и поддержки кода, а PSR-12 является широко признанным стандартом в сообществе PHP.
Придерживаясь PSR-12, вы обеспечиваете четкую структуру кода и слаженную работу членов команды. Одним из наиболее эффективных инструментов для соблюдения этого стандарта является PHP_CodeSniffer (phpcs), который проверяет ваш код на соответствие определенным стандартам и помогает исправить проблемы до того, как они попадут в прод.
Автоматизируйте работу с помощью Make (или другого инструмента, например Robo)
Использование таких инструментов автоматизации задач, как Make, может значительно упростить ваш рабочий процесс разработки, стандартизировав взаимодействие с инструментами и контейнерами (или другими вещами).
Если вы не знакомы с этими инструментами, то суть такова: вместо того чтобы многократно набирать одни и те же длинные команды, вы можете создать удобные ярлыки в Makefile.
Например, вместо того чтобы многократно выполнять команду docker compose exec -it server bash
для доступа к терминалу контейнера, вы можете создать простой Makefile, например, такой:
DKC = docker compose
up: ## Starts the Docker containers
$(DKC) up --detach
stop: ## Stops the Docker containers
$(DKC) stop
bash: ## Access bash
$(DKC) exec -it server bash
Теперь вы можете просто набрать make up
для запуска контейнеров или make bash
для открытия терминала, что сэкономит ваше время и силы.
Для больших проектов с более сложными задачами можно использовать Robo, который предлагает дополнительные возможности настройки.
Используйте надежные и актуальные фикстуры
Правильно подготовленные фикстуры необходимы для бесперебойного рабочего процесса разработки, предоставляя последовательные и реалистичные тестовые данные для моделирования реальных сценариев. Кроме того, они делают разработчиков счастливее, я гарантирую!
Регулярное обновление фикстур по мере развития проекта позволяет избежать проблем с устаревшими данными, что делает тестирование и отладку более эффективными.
Автоматизация загрузки фикстур и организация данных в модульные наборы могут упростить этот процесс, а интеграция фикстур в конвейеры CI/CD обеспечивает надежную тестовую среду.
Использование инструментов генерации динамических данных, таких как Faker, вносит разнообразие и реалистичность в тесты, а управление версиями фикстур позволяет синхронизировать их с изменениями кода.
Следуйте стратегии тестирования
- Unit-тесты с PHPUnit: Модульное тестирование гарантирует, что отдельные компоненты вашего кода работают так, как ожидается.
- Интеграционные тесты: Проверяют, как различные части системы работают вместе, особенно полезны для сложных приложений.
- Функциональные тесты с помощью Behat: Особенно полезно для разработки, ориентированной на поведение, позволяя тестировать реальные рабочие процессы пользователей.
- Используйте тестовое дублирование, например, моки (mocks), чтобы изолировать компоненты во время тестирования, обеспечивая актуальность и сфокусированность тестов.
Проверяйте архитектуру с помощью PHP Arkitect
- Установите и соблюдайте архитектурные стандарты: PHP Arkitect помогает обеспечить чистую и консистентную архитектуру, устанавливая правила, которые определяют структуру вашей кодовой базы. Это предотвращает появление непредвиденных шаблонов и сохраняет работоспособность проекта по мере его роста.
- Определите и задокументируйте вашу архитектуру: Определите архитектурные правила, такие как многоуровневые ограничения или ограничения зависимостей, которые соответствуют требованиям вашего проекта. Документирование этих правил позволяет понять, как должны взаимодействовать компоненты, что уменьшает двусмысленность для разработчиков.
- Продвигайте изоляцию модулей: PHP Arkitect обеспечивает строгие зависимости между модулями, гарантируя изолированность компонентов. Такая изоляция помогает сохранять тестируемость модулей, уменьшает сцепление и способствует рефакторингу.
Например, PHP Arkitect поможет определить, какие сервисы ваши контроллеры могут вызвать , какая логика может быть выполнена вместо фабрики (Factory).
Контейнеризуйте
- Используйте Docker для создания согласованных сред разработки, зеркально отражающих прод. Это гарантирует, что любой код, запущенный в деве, будет вести себя аналогично в проде.
- Используйте этапы сборки для обмена одними и теми же базовыми образами между средами дева и прода, чтобы убедиться, что во всех средах используются одни и те же точные версии всех зависимостей. (Вы же не хотите, чтобы в проде были ошибки, которые вы не можете воспроизвести локально, потому что ваша версия OpenSSL не совпадает с локальной, поверьте мне).
- Настройте файл
docker-compose.yml
для управления несколькими сервисами, такими как веб-серверы, базы данных, уровни кэширования, системы очередей…
Настройте непрерывную сборку и доставку (Continuous Integration & Deployment, CI/CD)
- Автоматизируйте тестирование и развертывание с помощью конвейеров CI/CD, используя такие платформы, как GitHub Actions, GitLab CI или Jenkins.
- Настройте автоматические тесты, линтеры и анализаторы кода для выполнения каждого push- или pull-запроса, чтобы убедиться, что новые изменения не нарушают существующую функциональность и что новый код соответствует стандартам проекта.
- Последовательное развертывание в производственных средах с механизмами отката, если это возможно.
Все эти механизмы должны сделать ваш PHP-проект надежнее, проще в работе и в целом лучше.
Они также позволяют команде лучше работать вместе, гарантируя, что все члены группы следуют одним и тем же стандартам и процессам!