Шаг 2: Знакомство с проектом

5.0 version
Maintained

Знакомство с проектом

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

Определение цели проекта

Было бы неплохо, если бы проект каким-то образом был связан с Symfony и конференциями, так как книга должна быть опубликована на конференции SymfonyCon 2019 в Амстердаме. Как насчёт гостевой книги или ливр д’ор, как мы называем её по-французски? Мне нравится это старое доброе ощущение разработки гостевой книги в 2019 году!

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

В проект будет входить несколько приложений. Классическое веб-приложение с использованием HTML, API и SPA-приложение для мобильных устройств.

Обучение на практике

Мы учимся, когда мы что-то делаем. Только так, и никак иначе. Конечно, читать книгу о Symfony — это хорошо, но разрабатывать приложение на своём компьютере по ходу чтения книги — гораздо лучше. Эта книга — нечто особенное, потому что было сделано всё возможное, чтобы вы могли повторять то, что в ней описано: писать код и достигать тех же результатов, что и я, когда разрабатывал приложение у себя.

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

Итоговая диаграмма структуры проекта

Несмотря на то, что наш проект кажется простым, мы не станем создавать приложение уровня «Hello World». Это значит, что мы не ограничимся только использованием PHP и взаимодействием с базой данных.

Речь идёт о создании проекта, с которым вы столкнетесь в реальности со всеми вытекающими сложностями. Не верите? Посмотрите на окончательный вариант инфраструктуры проекта:

../_images/infrastructure.svg

Одно из главных преимуществ использования фреймворка — небольшое количество кода, необходимого для разработки подобного проекта:

  • 20 PHP-классов в директории src/ для работы сайта;
  • 550 логических строк PHP-кода (LLOC) по данным PHPLOC;
  • 40 строк конфигурационных данных в 3 файлах (с использованием аннотаций и YAML) преимущественно для настройки архитектуры бэкенд-части;
  • 20 строк конфигурации инфраструктуры для разработки (Docker);
  • 100 строк конфигурации для продакшен-инфраструктуры (SymfonyCloud);
  • 5 установленных переменных окружения.

Готовы к такому испытанию?

Получение исходного кода проекта

Я бы мог по старинке приложить к книге компакт-диск с исходным кодом, так ведь? Но как насчёт использовать Git-репозиторий?

Клонируйте репозиторий гостевой книги на свой компьютер:

1
$ symfony new --version=5.0-4 --book guestbook

Этот репозиторий содержит весь код, который встречается в книге.

Обратите внимание, что мы используем команду symfony new вместо git clone, потому что она не только позволяет клонировать репозиторий, который находится в организации the-fast-track на GitHub по адресу https://github.com/the-fast-track/book-5.0-4. Также эта команда запускает веб-сервер и контейнеры, применяет миграции базы данных, загружает фикстуры и т.д. После выполнения команды будет запущен сайт, который можно сразу начать использовать.

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

К счастью, Git-репозиторий для книги автоматически генерируется из содержимого книги. Да, да, вы правильно поняли. Мне нравится всё автоматизировать, поэтому я написал скрипт, который считывает всю книгу и создаёт Git-репозиторий. У такого подхода есть приятный побочный эффект: при обновлении книги скрипт ничего не создаст, если будут противоречивые изменения, либо если я забуду обновить некоторые инструкции. Всё верно, это BDD (Book-Driven Development или разработка через написание книги)!


  • « Previous Шаг 1: Проверка рабочего окружения
  • Next » Шаг 3: С нуля до развёртывания

This work, including the code samples, is licensed under a Creative Commons BY-NC-SA 4.0 license.