Для моего проекта Flatiron School Ruby on Rails я создал веб-приложение под названием «Лестница к славе». Это симулятор фэнтези-группы, похожий по концепции на фэнтези-футбол, но с нюансами, присущими музыкальной индустрии.

Цель состояла в том, чтобы конечный продукт работал как игра, но при этом соблюдал интерфейс CRUD и соглашения Rails, которые мы изучали в нашей учебной программе. Сочетание требований проекта и логики, необходимой для запуска игры, было проблемой, которая помогла мне углубить понимание объектно-ориентированного программирования как микрокосмической экосистемы.

Использование методов обратного вызова Active Record помогло моим моделям творчески взаимодействовать с их собственными данными.

Руководство по Ruby on Rails описывает обратные вызовы следующим образом:

Обратные вызовы — это методы, которые вызываются в определенные моменты жизненного цикла объекта. С помощью обратных вызовов можно написать код, который будет выполняться всякий раз, когда объект Active Record создается, сохраняется, обновляется, удаляется, проверяется или загружается из базы данных. — https://guides.rubyonrails.org/active_record_callbacks.html

Обратные вызовы позволяют нам «подключаться» к объекту на разных этапах его жизненного цикла. Они абстрагируют идею необходимости вызова методов в «нужном месте и в нужное время» в нечто, что мы можем встроить в сами модели.

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

Использование ||= («или равно») позволяет модели проверять, было ли установлено значение, прежде чем оно записывает значение по умолчанию, в случае, если есть варианты использования, когда значение манипулируется пользователем.

Before_destroy — это еще один обратный вызов, который позволяет объекту сообщить все, что ему может понадобиться, чтобы сообщить своим родственникам, прежде чем он исчезнет. Объект группы будет уничтожен, в то время как объекты музыканта будут разъединены и возвращены в пул доступных музыкантов, где их затем смогут подобрать другие группы.

Последний пример из этого проекта использует before_save для модели таблицы соединений «Show». Это место, где соединяются модели Band и Venue, представляет момент в нашем приложении, когда все движущиеся части сходятся в единый момент времени. В этом моменте заключена большая часть игровой логики и алгоритмов, которые обрабатывают результаты этой уникальной встречи и соединения объектов.

Использование before_save позволяет нам выполнить соответствующие проверки, подтверждающие, что объекты, играющие в этом «шоу», имеют нужное качество и тип, прежде чем приступить к вычислению результатов.

В документации Rails перечислены 16 различных обратных вызовов. Эти обратные вызовы вращаются по обе стороны от большинства ваших основных действий контроллера. Например, существуют обратные вызовы before_save, around_save и after_save, позволяющие подключить дополнительную логику на всех сторонах одного и того же вызова. Есть даже

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

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

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