Освоение веб-разработки на Go: создание Flashcard приложения
Этот проект предоставит ценную информацию о возможностях и передовых методах веб-разработки Go, независимо от того, являетесь ли вы новичком или опытным разработчиком.
К концу этой серии вы получите прочную основу для веб-разработки на Go и будете готовы создавать собственные веб-приложения.
Установка
Сначала мы должны установить Go для выбранной вами операционной системы. Я использую WSL (Windows Subsystem for Linux) в Windows, и у меня нет проблем, следуя инструкциям официальной документации.
Мы предполагаем, что вы используете версию go > 1.16, поэтому модули включены по умолчанию (ссылка).
Настройка проекта
Примечание: Я следую соглашению из этого репозитория для структуры проекта.
Создайте папку и инициализируйте проект
mkdir flashcard-go
cd flashcard-go
go mod init github.com/<your_username>/flashcard-go
Это должно было создать файл go.mod
. Этот файл имеет имя модуля и версию Go. Модуль идентифицируется путем к модулю, который объявлен в файле go.mod
вместе с информацией о зависимостях модуля. Как правило, путь к модулю состоит из корневого пути репозитория, каталога в репозитории (обычно пустого) и суффикса основной версии (только для основной версии 2 или выше) (ссылка).
Программная архитектура проекта
Существует множество программных архитектур и шаблонов, модель-представление-контроллер (MVC), клиент-сервер, микросервисы, многоуровневые, шестиугольные (порты и адаптеры) и другие. В нашем случае я выбираю шестиугольный подход. Это излишество, не обязательно и непрактично для нашего маленького проекта, но это широко используется, и мы можем многому у него научиться.
Наши точки входа будут внутри папки cmd. Здесь у нас может быть несколько точек входа (например, отдельное веб-приложение от cli), и вы можете держать всех в своей папке (для целей тестирования). Содержимое файлов внутри этой команды не должно использоваться другими частями веб-приложения.
Первое, что мы собираемся сделать, это отделить ядро от нашего исходного кода. Начиная с версии Go 1.4 команда go вводит механизм для определения «internal» пакетов, которые не могут быть импортированы пакетами за пределами исходного поддерева, в котором они находятся. Чтобы создать такой пакет, поместите его в каталог с именем «internal» или в подкаталог каталога с именем «internal» (ссылка).
flashcard-app/
├─ cmd/
│ ├─ web/
│ │ ├─ // Main entry point
│ ├─ cli/
│ │ ├─ // Possibly another entry point
├─ internal/
│ ├─ // Business Logic
├─ site/
│ ├─ // Front End
Определение бизнеса
Цель приложения
Это веб-приложение поможет пользователям создавать викторины с помощью карточек. Пользователи могут создавать, просматривать, редактировать и удалять карточки и викторины. Основная цель — предоставить пользователям простой и интуитивно понятный интерфейс для создания образовательных викторин.
Определите основные бизнес-концепции
- Flashcard: отдельная карта, используемая для обучения. Каждая карточка содержит вопрос и соответствующий ему ответ.
- Quiz: набор из нескольких карточек, организованных для проверки знаний пользователя по определенным темам. У викторины должно быть название, описание и набор карточек.
Типовые бизнес-правила и отношения
- На карточке должен быть непустой вопрос и ответ.
- Карточки связаны с викторинами (отношение «многие к одному»), что означает, что несколько карточек могут принадлежать к одной и той же викторине.
- Викторина должна иметь непустой заголовок.
- Викторина должна иметь непустое описание.
- Викторина может иметь ноль или более карточек, связанных с ней (отношение «один ко многим»).
Сущности
- Flashcard
- Quiz
Варианты использования
Мы упростим эту вещь и добавим эти возможные варианты использования.
- Создание, редактирование и удаление карточек
- Создание, редактирование и удаление викторины
- Прохождение викторины: пользователи могут пройти викторину, и приложение представит вопрос каждой карточки один за другим, позволяя пользователям ответить
- Прохождение викторины: пользователи могут пройти викторину, и приложение представит вопрос каждой карточки один за другим, позволяя пользователям ответить
Начать кодирование
Оставайтесь с нами, пока мы углубляемся в реализацию гексагональной архитектуры, организуем структуру проекта и воплощаем в жизнь наше «Приложение Flashcard Quiz» используя язык программирования Go!