Spec-Zone.ru › Phoenix

6. Часто задаваемые вопросы

Исходный код

Здесь мы собрали часто задаваемые вопросы о контекстах.

Когда использовать генераторы кода?

В этом руководстве мы использовали генераторы кода для схем, контекстов, контроллеров и других компонентов. Если вас устраивают настройки Phoenix по умолчанию, можете смело использовать генераторы для создания значительной части приложения. При использовании генераторов Phoenix главный вопрос, на который нужно ответить: относится ли эта новая функциональность (с её схемой, таблицей и полями) к одному из существующих контекстов или для неё нужен новый?

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

Как организовать код внутри контекстов?

Возможно, вы задаётесь вопросом, как организовать код внутри контекстов. Например, следует ли определить один модуль для changeset (например, ProductChangesets), а другой — для запросов (например, ProductQueries)?

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

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

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

Возврат структур Ecto из API контекстов

Изучая API контекстов, вы могли задаться вопросом:

Если одна из целей контекста — инкапсулировать доступ к Ecto Repo, почему create_user/1 возвращает структуру Ecto.Changeset, если создать пользователя не удаётся?

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

По этим причинам %Ecto.Changeset{} — хороший выбор для моделирования изменений данных между контекстами и веб-уровнем, независимо от того, взаимодействуете ли вы с API или с базой данных.

Наконец, обратите внимание, что ваши контроллеры и представления также не привязаны к работе исключительно с Ecto. Вместо этого Phoenix определяет протоколы, такие как Phoenix.Param и Phoenix.HTML.FormData, которые позволяют любой библиотеке расширить возможности Phoenix по созданию параметров URL или отображению форм. К счастью, проект phoenix_ecto реализует эти протоколы, но вы также можете использовать собственные структуры данных и реализовать эти протоколы самостоятельно.

← Предыдущая страница 5. Подводим итоги
Следующая страница → Введение в аутентификацию

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

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

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

Spec-Zone.ru

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