Шрифт:
Интервал:
Закладка:
Резюме
Знание того, как устанавливать внешние библиотеки и управлять ими, является невероятно полезным инструментом при разработке любого приложения, над которым вы, возможно, будете работать в будущем. Обнаружение существующего шарда может значительно ускорить время разработки ваших проектов, устраняя необходимость самостоятельной реализации этого кода. Это также облегчит поддержку вашего проекта, поскольку вам не придется поддерживать код самостоятельно. Обязательно следите за списками и базами данных, о которых мы говорили, для осколков, которые могут быть полезны в ваших проектах!
В следующей главе мы собираемся использовать некоторые внешние библиотеки для создания веб-приложения с использованием Athena.
9. Создание веб-приложения с помощью Athena
Сходство Crystal с Ruby сделало его весьма популярным как веб-язык в надежде побудить некоторых пользователей Ruby on Rails, а также других фреймворков, перейти на Crystal. Crystal может похвастаться довольно большим количеством популярных фреймворков: от простых маршрутизаторов до полнофункционального стека и всего, что между ними. В этой главе мы рассмотрим, как создать приложение с использованием одной из этих платформ в экосистеме Crystal под названием Athena Framework. Хотя мы будем активно использовать эту структуру, мы также рассмотрим более общие темы, которые можно использовать независимо от того, какую структуру вы в конечном итоге выберете. К концу главы мы рассмотрим следующие темы:
• Понимание архитектуры Athena.
• Начало работы с Athena
• Реализация взаимодействия с базой данных.
• Использование согласования содержания
Технические требования
Требования к этой главе следующие:
• Рабочая установка Crystal.
• Возможность запуска сервера PostgreSQL, например, через Docker.
• Способ отправки HTTP-запросов, например cURL или Postman.
• Установленная и работающая версия https://www.pcre.org/ (libpcre2).
Инструкции по настройке Crystal можно найти в Главе 1 «Введение в Crystal». Есть несколько способов запустить сервер, но я буду использовать Docker Compose и включу используемый мной файл в папку главы.
Все примеры кода, использованные в этой главе, можно найти на GitHub: https://github.com/PacktPublishing/Crystal-Programming/tree/main/ Chapter09.
Понимание архитектуры Афины
В отличие от других платформ Crystal, Athena Framework в первую очередь черпает вдохновение из не-Ruby-фреймворков, таких как Symfony PHP или Spring Java. Из-за этого он обладает некоторыми уникальными функциями/концепциями, которых нет больше нигде в экосистеме. Со временем он постоянно совершенствовался и имеет прочную основу для поддержки будущих функций/концепций.
Athena Framework — это результат интеграции различных компонентов более крупной экосистемы Athena в единую связную структуру. Каждый компонент предоставляет различные функции платформы, такие как сериализация, проверка, обработка событий и т. д. Эти компоненты также можно использовать независимо, например, если вы хотите использовать их функции в другой платформе или даже использовать их для создания своей собственной платформы. Однако их использование в Athena Framework обеспечивает наилучшие возможности/интеграцию. Некоторые из основных моментов включают следующее:
• На основе аннотаций
• Соблюдает принципы проектирования SOLID:
• S – принцип единой ответственности
• O – принцип открыт-закрыт.
• L - принцип замены Лискова
• I – принцип разделения интерфейса.
• D – принцип инверсии зависимостей
• На основе событий
• Гибкая основа
Аннотации являются основной частью Athena, поскольку они, помимо прочего, являются основным способом определения и настройки маршрутов. Например, они используются для указания того, какой HTTP-метод и путь обрабатывает действие контроллера, какие параметры запроса следует читать и любую пользовательскую логику, которую вы хотите, с помощью определяемых пользователем аннотаций. При таком подходе вся логика, связанная с действием, централизована в самом действии, а не в одном файле, а логика маршрутизации — в другом. Хотя Athena широко использует аннотации, мы не собираемся углубляться в них, поскольку они будут рассмотрены более подробно в Главе 11 «Введение в аннотации».
Поскольку Crystal является объектно-ориентированным (ОО) языком, Athena рекомендует следовать лучшим практикам объектно-ориентированного программирования, таким как SOLID. Эти принципы, особенно принцип инверсии зависимостей, весьма полезны при разработке приложения, которое легко поддерживать, тестировать и настраивать за счет интеграции сервисного контейнера внедрения внешних зависимостей (DI). Каждый запрос имеет собственный контейнер со своим набором сервисов, что позволяет обмениваться состоянием, не беспокоясь о потере состояния между запросами. Использование контейнера службы DI за пределами самой Athena возможно при использовании этого компонента отдельно, однако то, как лучше всего реализовать/использовать его в проекте, немного выходит за рамки этой главы.
Athena — это платформа, основанная на событиях. Вместо использования цепочки HTTP::Handler в течение жизненного цикла запроса создаются различные события. Эти события и связанные с ними прослушиватели используются для реализации самой платформы, но пользовательские прослушиватели также могут использовать те же события. В конечном итоге это приводит к очень гибкой основе. Поток запроса изображен на следующем рисунке:
Рисунок 9.1 - Схема жизненного цикла запроса
Прослушиватели этих событий можно использовать для чего угодно: от обработки CORS, возврата ответов об ошибках, преобразования объектов в ответ посредством согласования содержимого или чего-либо еще, что может понадобиться вашему приложению. Пользовательские события также могут быть зарегистрированы. См. https://athenaframework.org/comComponents/ для более подробного изучения каждого события и того, как они используются.
Хотя это может показаться очевидным, важно отметить, что Athena Framework — это платформа. Другими словами, его основная цель — предоставить вам строительные блоки, используемые для создания вашего приложения. Фреймворк также использует эти строительные блоки внутри себя для построения основной логики фреймворка. Athena старается быть максимально гибкой, позволяя вам использовать только те функции/компоненты, которые вам нужны. Это позволяет вашему приложению быть настолько простым или сложным, насколько это необходимо.
У Athena также есть несколько других компонентов, которые выходят за рамки этой главы, чтобы их более подробно изучить. К ним относятся следующие, ссылки на которые приведены в разделе «Дополнительная литература» в конце главы:
• EventDispatcher — обеспечивает работу прослушивателей и основанную на событиях природу Athena.
• Console — позволяет создавать команды на основе CLI, аналогичные задачам rake.
• Routing. Эффективная и надежная маршрутизация HTTP.
Кроме того, посетите https://athenaframework.org/, чтобы узнать больше о платформе и ее функциях. Не стесняйтесь зайти на сервер Athena Discord, чтобы задать любые вопросы, сообщить о любых проблемах или обсудить возможные улучшения платформы.
Но хватит разговоров. Давайте приступим к написанию кода и посмотрим, как все происходит на практике. В этой главе мы рассмотрим создание простого приложения для блога.
Начало работы с Афиной
- QT 4: программирование GUI на С++ - Жасмин Бланшет - Программирование
- C# для профессионалов. Том II - Симон Робинсон - Программирование
- Как спроектировать современный сайт - Чои Вин - Программирование
- Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2 - Александр Фролов - Программирование
- Краткое введение в программирование на Bash - Гарольд Родригес - Программирование
- Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен - Программирование
- Каждому проекту своя методология - Алистэр Коуберн - Программирование
- Разработка ядра Linux - Роберт Лав - Программирование
- Графические интерфейсы пользователя Java - Тимур Сергеевич Машнин - Программирование
- C# 4.0: полное руководство - Герберт Шилдт - Программирование