IT заметки.


Я backend-разработчик в одной аутсорс-компании. Бэк пишу на PHP, использую Laravel.
Заметки носят спонтанный и немного эмоциональный характер, как правило, текст заметки не редактирую

Как правильно разбирать задачи с багами

1. Разберитесь в задаче и воспроизведите ошибку.
Перед тем как что-либо исправлять, внимательно изучите баг и попробуйте воспроизвести его у себя на тестах. Ошибка должна возникать стабильно – это значит, что вы её реально поймали.

2. Сначала тест, потом фикc.
Добавьте тест (или измените существующий), который явно проявляет баг. Для уверенности — убедитесь, что тест падает. Только после этого приступайте к исправлению кода.

3. После фикса тесты должны пройти.
После внесения правки — все старые тесты должны по-прежнему работать, а новый тест, который раньше падал, должен успешно проходить. Это показывает, что баг реально исправлен и другой функционал не сломан.


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

#bug #разработка #тесты

09:20 23.10.2025г.

Перечитываю Роберта Мартина

Хотелось бы выделить фразу «Поспешай не спеша». Раньше я часто торопился и старался делать всё как можно быстрее, чтобы угодить менеджеру. Но теперь понимаю, что это плохая практика. Я должен бороться за качество кода, не спешить с его написанием, а уделять время продумыванию разных вариантов реализации и выбирать лучший из них.

Такой подход помогает создавать более надёжный, понятный и поддерживаемый код, что в итоге экономит время всей команды и снижает технический долг.

#разработка #самоорганизация
Это очень актуально, недавно завершил проект, в котором пришлось из-за спешки переделывать проверку статусов из-за не оптимального решения.

19:06 14.10.2025г.

Использование генератора в php и yeld

Cмысл генератора и yield — выдавать тебе по одному элементу для работы.
Ты берёшь элемент, работаешь с ним, потом получаешь следующий элемент, а если тебе просто надо собрать всё подряд, то генератор получается и не нужен.

Генератор в PHP позволяет использовать yield для возвращения элементов по одному, не загружая всю коллекцию в память сразу. Это полезно, когда вы работаете с большим количеством данных и хотите минимизировать потребление памяти.

07:46 29.07.2025г.

Почему нельзя менять предыдущие миграции в laravel?


После того как мы залили изменения в ветку development, происходит деплой (доставка) кода приложения на dev сервер. В ходе этой операции выполняется команда php artisan migrate. При выполнении этой команды последовательно исполняются классы миграций, и происходит запись в базу данных об исполнении каждого класса. При последующей доставке приложения на dev сервер, снова выполнится php artisan migrate, и применятся миграции, которые Laravel не нашёл в базе данных.

Кроме того, при изменении существующей миграции существуют случаи, когда такая миграция будет мешать применению последующих миграций, которые были реализованы без учета ваших изменений.

#laravel #migration

12:47 13.07.2025г.

Немного про слои MVC и как они используются в нашем проекте



Хочу разобрать с вами букву "C".

"С" - Контроллер управляет пользовательским вводом, связывает модель и представление, обрабатывая действия пользователя и обновляя интерфейс в ответ на изменения.

У нас в приложение контроллер разбит на части:
- Request
- Controller

Request - это та часть "C", в которой мы проверяем запрос от пользователя:

— есть ли у нас данные, которые запрашивает пользователь,
— доступны ли эти данные пользователю,
— в каком формате должны быть заданы данные

Controller
— готовит данные для использования в нашем приложение, и передаёт в Модель , в которой уже происходит работа с проверенными и подготовленными данными
— связывается Модель (Service - Repository - Model) c представлением (Recources, Reponse и тд)


PS в сервисе не нужно проверять валидность и доступность запрашиваемых данных для полученного запроса.

#mvc #арихтектура

10:08 04.07.2025г.

Ещё немного о тестирование


Набор данных в тестах должен быть максимально приближен к реальным, но и интуитивно понятен для разработчика.

#тесты

14:10 07.06.2025г.

PostgreSQL и foreign ключи


Операция TRUNCATE в СУБД PostgreSQL не обращает внимание на FOREIGN ключи :)

#заметка #субд #PostgreSQL

23:12 28.05.2025г.

Данные, при тестирование


Старайся тестировать с реальными данными, а не просто с набором цифр и букв в поле бд

09:22 05.05.2025г.

Личное мнение про типизацию

Все что не типизировано должно быть типизировано, если даже язык позволяет не типизировать.  Строгая типизация всегда лучше.


Лично мне не нравится введенный в PHP тип данных mixed и такие конструкции array|string

Это поможет избежать кучу непредвиденных проблем из-за автотипизиации.
например на PHP в ларавеле я жду от запроса ИНТ прилетает строка "1" и она автоматически становится INT - Такое надо проверять обязательно.

#типизация

09:49 30.04.2025г.

Тезис про тестирование


Мокай в слои как можно ниже уровнем, чем ниже ты сможешь замокать, тем лучше будет тест. #тесты

06:18 26.04.2025г.

Про коммуникацию между командой разработчиков

После согласования задачи лучше всего выдержать время, так как заказчик (менеджер проекта) может придумать новое условие или вспомнить какие-то упущенные нюансы. А ты, как коммуникатор, должен проверить полученную информацию. Я думаю, для небольших изменений в задачах можно выдерживать промежуток в полчаса-час, а вот для больших задач лучше выдерживать до 4 часов. Задача, как вино, со временем становится только лучше.

#таймменеджмент #коммуникация

10:24 24.04.2025г.

Принцип единственной ответственности


После написания функции задавайся вопросом, а у тебя точно функция совершает лишь одно действие и не берет на себя ничего лишнего.

#ревью

22:59 22.04.2025г.

Мысли про типизацию в PHP


Все что не типизировано должно быть типизировано, если даже язык позволяет не типизировать. Строгая типизация всегда лучше.
Лично мне не нравится введенный в PHP тип данных mixed и такие конструкции array|string
Это поможет избежать кучу непредвиденных проблем из-за автотипизиации.
например на PHP в ларавеле я жду от запроса ИНТ прилетает строка "1" и она автоматически становится INT - Такое надо проверять обязательно.

#типизация

22:54 22.04.2025г.