Вам предстоит создать приложение для флэш-карт, которое должно работать как показано на Рисунке 1. Перед написанием приложения вам предстоит спроектировать его объектную архитектуру. Это значит, что вам нужно будет понять какие классы будут созданы и как они будут взаимодействовать между собой. Также вы познакомитесь с шаблоном проектирования MVC (Model-View-Controller) в его самой простой форме.
Рисунок 1. Пример реализации флэш-карты.
Давайте договоримся о том, как вы будете выстраивать ваше приложение. Как выглядит игра с колодой флэш-карт – от момента загрузки данных в файл до проверки того, верна ли ваша догадка? Что должно происходить? Приложение должно работать так, как было показано на Рисунке 1, но не обязательно должно быть его точной копией: например, можно дать пользователям не одну, а несколько попыток на отгадывание карточки.
Когда у вас сформируется четкое понимание того, что должно происходить, то можно приступать к разработке приложения. Нарисуйте черновой вариант классов, которые собираетесь создать, их взаимодействие между собой, а также общий ход программы.
Обычно создавать классов больше чем требуется считается плохой практикой (так называем оверинжиниринг). Однако, в этом проекте вы можете дать волю своей фантазии и создать столько классов сколько сможете придумать. Главное, что у каждого класса должна быть своя чёткая ответственность.
Подсказку в том какие классы вам нужны можно почерпнуть из шаблона проектирования графических приложений MVC. Не нужно сейчас гуглить и читать про этот паттерн. Он довольно сложен для начинающих. Однако, стоит усвоить, что такое Model и View (Представление).
Модель отвечает за работу с данными и их хранение. Модель - это не один класс, классов модели может быть много. Например, в вашем случае это могут быть Темы, Вопросы, Класс читающий всё это из файла, Класс отвечающий за логику игры и подсчёт очков.
Представление (так же не обязательно один класс) - отвечает за отображение приложения на экране. Обычно представлениям доступна модель (например, список вопросов, количество очков и т.д.) и по ней оно строит отображение.
Модель и Представление взаимодействуют таким образом:
- Создаются объекты модели и в них загружаются начальные данные (темы, вопросы, очки и т.д.)
- Объекты представления берут объекты модели и согласно им отображают пользовательский интерфейс на экране.
- Пользователь взаимодействует с интерфейсом.
- Представление вызывает методы модели, чтобы изменить её.
- Модель меняется и представление перерисовывается согласно этим изменениям.
- Всё повторяется с пункта 2.
Кроме классов Модели и Представления могут быть и другие классы. Вашу фантазию в этом проекте никто не ограничивает!
Этот release занимает приблизительно 1 час. Если вы потратили больше времени и чувствуете, что застряли, то найдите человека, который поможет вам справиться с возникшей проблемой.
Пора кодить! У вас есть папка topics
, в которой лежат несколько файлов с флеш-карточками (вопросами и ответами). Например, nighthawk_flashcard_data.txt
. Пользователь должен иметь возможность воспользоваться и работать с любым из этих файлов. Будет здорово если вы создите собственные файлы со своими вопросами.
НЕОБЯЗАТЕЛЬНОЕ УСЛОВИЕ: Будет здорово если вы попрактикуете ещё и работу с промисами. Используйте методы fs
, которые возвращают промисы.