Каждый разработчик в компании ООО “Арт Проект” должен четко понимать, как строится структура кода и приложения при его разработке на Yii2, а также соблюдать эти правила в ходе выполнения проекта и поправлять коллег в случае выявления отклонений от данных правил.
Документ призван решить спорные вопросы и определить порядок действий при их возникновении.
Бизнес-логика
Модели ActiveRecord
должны описывать структуру данных таблиц в базе данных;
Бизнес-логике не место в ActiveRecord
, контроллере и тем более в представлении. Размещать бизнес-логику необходимо в отдельных классах с говорящими названиями “СущностьДействие”. В результате получаются “худые” контроллер и ActiveRecord
. Данный подход повышает читабельность проекта в разы, а также позволяет производить тестирование бизнес-логики.
Не рекомендуется использовать beforeSave, afterSave, beforeFind, afterFind в ActiveRecord
для тяжелой бизнес-логики (например, запросы к сторонним ресурсам, парсинг Excel, тяжелых XML файлов и т.д).
Не рекомендуется размещать любую бизнес-логику в классах ActiveRecord
.
<aside> ❗ Все обновления в БД осуществляются только посредством оформления миграции
</aside>
На практике встречаются случаи, когда разработчик размещает функционал, который более подходит для консольного приложения либо для миграций, в контроллер веб приложения, что недопустимо.
yii\\db\\Migration
.Для MySQL используем движок InnoDB, так как он предоставляет полезные функции, например, такие как транзакции и внешние связи.
Если в проекте используется СУБД MySQL для использования внешних ключей (Foreign keys) и транзакций, в качестве системы хранения данных (Storage engine) должна быть выбрана InnoDB. При создании таблицы в БД необходимо использовать следующую конструкцию:
Метод down в миграциях обязателен к реализации, если миграция является обратимой. Нежелательно, чтобы метод down возвращал false
.
Перед публикации миграций в Git необходимо обязательно убедиться в том, что миграции исправно накатываются и откатываются (php yii migrate/redo n
).
Для добавления нескольких записей в базу данных стоит использовать batchInsert
вместо конструкции, когда вызывается insert
в цикле (то же касается и консольных алгоритмов).