Spec-Zone.ru › Phoenix

1. Введение в контексты

Исходный код

Руководства по Phoenix разделены на несколько основных разделов. Основные строительные блоки описаны в разделе «Основные концепции», где мы изучили жизненный цикл запроса, связали действия контроллеров с помощью маршрутизаторов и узнали, как Ecto позволяет проверять и сохранять данные. Теперь пора связать всё воедино и создать функции, доступные через веб-интерфейс и взаимодействующие с нашим приложением на Elixir.

Создавая проект Phoenix, мы в первую очередь создаём приложение на Elixir. Задача Phoenix — предоставить веб-интерфейс к нашему приложению на Elixir. Разумеется, мы составляем приложения из модулей и функций, но часто поручаем определённые задачи конкретным модулям и даём им названия, например: контроллеры, маршрутизаторы и live-представления.

Однако важнейшая часть веб-приложения часто заключается в том, где мы инкапсулируем доступ к данным и их проверку. Такие модули мы называем контекстами. Они часто взаимодействуют с базой данных с помощью Ecto или с API, используя HTTP-клиент, например Req. Давая этим модулям названия, мы помогаем разработчикам распознавать такие шаблоны и обсуждать их. В конечном счёте контексты — это просто модули, как и контроллеры, представления и прочее.

Если вы использовали mix phx.gen.html, mix phx.gen.json или mix phx.gen.live, значит, вы уже работали с контекстами. Например, запустите следующий генератор в приложении Phoenix:

$ mix phx.gen.live Post posts title body:text

Приведённая выше команда создаст несколько файлов, в том числе схему MyApp.Posts.Post в lib/my_app/posts/post.ex, описывающую представление ресурса в базе данных, и модуль контекста с именем MyApp.Posts, инкапсулирующий весь доступ к базе данных для этой схемы. Модуль MyApp.Posts централизует все функции, связанные с публикациями, вместо того чтобы распределять логику по контроллерам, LiveViews и другим компонентам.

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

$ mix phx.gen.live Posts Comment comments post_id:references:posts body:text

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

Разработчики также могут использовать контексты, чтобы намеренно присваивать названия частям приложения. Например, для работы mix phx.gen.auth требуется явно указать имя контекста. Обычно её запускают так:

$ mix phx.gen.auth Accounts User users

или, выбрав любое подходящее имя, например:

$ mix phx.gen.auth Identity Client clients

Сгенерированный контекст Accounts (или Identity) будет инкапсулировать всю функциональность для управления пользователями (или клиентами) и их токенами. При желании контекст можно назвать и Users, но управление учётными записями и идентификацией имеет чётко определённое название и границы в большинстве приложений, поэтому явное имя проясняет его назначение. И в конечном счёте всё это просто обычные модули.

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

Наше приложение для электронной коммерции

Начнём с создания приложения для электронной коммерции с нуля с помощью Phoenix Express. Назовём приложение hello.

Для macOS/Ubuntu:

$ curl https://new.phoenixframework.org/hello | sh

Для Windows PowerShell:

curl.exe -fsSO https://new.phoenixframework.org/hello.bat; .\hello.bat

Если эти команды не работают, ознакомьтесь с руководством по установке, а затем выполните mix phx.new:

$ mix phx.new hello

Выполните любой из шагов, указанных на экране, и откройте созданный проект hello в редакторе.

Теперь можно перейти к следующей главе.

← Предыдущая страница Безопасность
Следующая страница → 2. Ваш первый контекст

Пакет Hex Предварительный просмотр Hex (текущий файл) Скачать версию ePub

Создано с помощью ExDoc (v0.40.3) для языка программирования Elixir

© 2014 Chris McCord
Licensed under the MIT License.
https://phoenix.hexdocs.pm/contexts.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API