Каждый разработчик в компании ООО “Арт Проект” должен четко понимать, как строится структура кода и приложения при его разработке на Yii2, а также соблюдать эти правила в ходе выполнения проекта и поправлять коллег в случае выявления отклонений от данных правил.

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

Правила ведения разработки веб-проектов в компании “Арт Проект”

  1. Бизнес-логика

    1. Модели ActiveRecord должны описывать структуру данных таблиц в базе данных;

    2. Бизнес-логике не место в ActiveRecord, контроллере и тем более в представлении. Размещать бизнес-логику необходимо в отдельных классах с говорящими названиями “СущностьДействие”. В результате получаются “худые” контроллер и ActiveRecord. Данный подход повышает читабельность проекта в разы, а также позволяет производить тестирование бизнес-логики.

      https://s3-us-west-2.amazonaws.com/secure.notion-static.com/0511a2fe-1ba3-4002-a391-9e37acdadee0/image12.jpg

  2. Не рекомендуется использовать beforeSave, afterSave, beforeFind, afterFind в ActiveRecord для тяжелой бизнес-логики (например, запросы к сторонним ресурсам, парсинг Excel, тяжелых XML файлов и т.д).

  3. Не рекомендуется размещать любую бизнес-логику в классах ActiveRecord.

Миграции

<aside> ❗ Все обновления в БД осуществляются только посредством оформления миграции

</aside>

  1. Все изменения данных, которые необходимо произвести единожды у всех участников проекта, необходимо реализовывать через миграции;
  2. Если изменения данных в БД необходимо производить с некой периодичностью, следует вынести такие изменения в консольное приложение.

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

  1. Категорически запрещено изменять старые (уже попавшие в Git) миграции даже при условии, что вы работаете в отдельной ветке. Для внесения правок необходимо готовить новую миграцию. Данным пунктом можно пренебречь только в одном случае, если старая (уже попавшая в Git) миграция заведомо содержит ошибки/баги, и вносимые изменения направлены на устранение этих самых ошибок/багов.
  2. Категорически запрещено использовать в миграциях: модели, конфигурацию или любые другие элементы из основного проекта. Миграция должна быть самодостаточной сущностью и может использовать только методы, унаследованные от yii\\db\\Migration.
  3. Если необходимо сделать SELECT в миграции, используем класс yii\db\Query

Untitled

  1. Для MySQL используем движок InnoDB, так как он предоставляет полезные функции, например, такие как транзакции и внешние связи.

  2. Если в проекте используется СУБД MySQL для использования внешних ключей (Foreign keys) и транзакций, в качестве системы хранения данных (Storage engine) должна быть выбрана InnoDB. При создании таблицы в БД необходимо использовать следующую конструкцию:

    https://s3-us-west-2.amazonaws.com/secure.notion-static.com/69771a0e-f9ba-4331-8d91-c14840c4494e/image30.jpg

  3. Метод down в миграциях обязателен к реализации, если миграция является обратимой. Нежелательно, чтобы метод down возвращал false.

  4. Перед публикации миграций в Git необходимо обязательно убедиться в том, что миграции исправно накатываются и откатываются (php yii migrate/redo n).

  5. Для добавления нескольких записей в базу данных стоит использовать batchInsert вместо конструкции, когда вызывается insert в цикле (то же касается и консольных алгоритмов).