Лабораторная работа № 3 #
Проверяемые знания #
- Знание основ языка HTML.
- Умение структурировать HTML-документы.
- Знание основ языка CSS.
- Умение применять классы CSS к HTML-элементам.
- Умение подключать внешние CSS-файлы к HTML-документу.
- Умение использовать CSS-стили фреймворка.
- Умение формировать динамические HTML-страницы на основе данных.
- Умение считывать информацию из структурированных файлов.
- Знание основ маршрутизации HTTP-запросов с помощью библиотеки http4k.
- Умение обрабатывать GET и POST-запросы с помощью библиотеки http4k.
- Умение формировать динамические HTML-страницы с помощью шаблонизатора.
- Умение корректно обрабатывать параметры, приходящие от пользователя:
- Через маршруты к документам.
- Через параметры маршрута.
- Через содержимое интерактивной HTML-формы, приходящей в теле запроса.
- Через содержимое HTML-формы, закодированной в поток данных.
- Умение применять средства статического анализа кода Kotlin: ktlint и detekt.
- Умение писать модульные тесты для проверки логики HTTP-обработчиков.
Требования к лабораторной работе #
- Результат работы — исходные коды приложения без артефактов сборки приложения (без каталогов
bin
,build
,.gradle
,.idea
) и без журналов работы приложения (без каталога logs).- Не надо добавлять в архив с исходными кодами файлы, которые не нужны для компиляции, запуска. Исключением является — документация по работе приложения.
- В передаваемом архиве должны отсутствовать результаты работы приложения. Приложение должно запускаться и продуцировать результаты на любом компьютере, удовлетворяющем требованиям.
- В передаваемом архиве должны находиться данные, которые необходимы приложению для запуска. Такие данные не должны быть размещены в каталоге с исходными кодами приложения.
- Приложение должно запускаться из любого каталога, не должно быть привязок к местоположению каталога приложения в абсолютных путях.
- Приложение должно быть разработано с использованием языка программирования Kotlin.
- Приложение должно быть разбито на логические части: функции, пакеты и классы.
- HTML-код внутри создаваемых документов должен соответствовать спецификации HTML5.
- Для стилизации элементов на странице необходимо использовать классы CSS-фреймворков, запрещено указание CSS-свойств внутри HTML-кода.
- Если требуется доработка CSS-свойств HTML-элементов, то необходимо определить CSS-классы в CSS-файлах, подключить данные файлы к нужным HTML-документам и применить классы к нужным элементам.
- Для указания пути к HTML-документам внутри приложения необходимо использовать относительные пути. Запрещено использование абсолютных путей.
- Для формирования HTML-документов рекомендуется использовать шаблонизатор.
- В созданных HTML-документах должна находится общая навигационная панель, позволяющая переходить между ключевыми разделами сайта.
- Приложение должно корректно обрабатывать некорректные данные от пользователя:
- Всегда должны формироваться HTML-документы с корректным содержимым.
- Приложение не должно показывать техническую информацию об исключительных ситуациях, стеках вызова и прочее пользователю. Данные ситуации должны быть явно обработаны внутри вашего кода приложения и преобразованы в сообщения, понятные для пользователя. Для решения этой задачи запрещено использовать фильтр с перехватом всех исключительных ситуаций приложения.
- В случае отсутствия искомого документа должна отображаться соответствующая страница.
- Логику проверки данных, поступающих от пользователя, следует выделять в отдельный слой.
- Страницы со списками данных должны корректно обрабатывать ситуацию отсутствия данных. Вместо пустой страницы должно присутствовать информационное сообщение о том, что в данном списке нет данных.
- Приложение должно соответствовать требованиям к исходному коду, предоставляемыми актуальной версией инструмента ktlint. Конфигурация ktlint должна соответствовать требованиям.
- Рекомендуется исправить все недостатки, на которые указывает инструмент detekt.
- В приложении и в используемых файлах не должны систематически дублироваться данные. Для описания одной сущности приложения в глобальном хранилище данных должно хранится не более одной копии
- Рекомендуется разработать модульные тесты для проверки работоспособности HTTP-обработчиков.
- Приложение должно обрабатывать HTTP-запросы по порту 9000.
- Приложение должно формировать только частичные URI. Запрещено использовать полные URI.
- Необходимо подготовить тестовые данные для проверки работоспособности приложения.
- Данных должно быть достаточно. Минимальный объём данных — 1000 записей на один список данных.
- Данные для проверки можно сгенерировать. Однако они должны быть репрезентативными:
- Числа, включая даты, должны быть распределены на некотором временном промежутке.
- Названия можно генерировать из базового набора частей. Например 10 фамилий, 10 имён и 10 отчеств должно быть достаточно для создания достаточно уникальных имён для всех записей.
- Данные необходимо считывать при старте приложения из файла, который хранится на файловой системе рядом с исходными кодами.
- Данные, изменённые пользователем в результате работы с приложением, должны сохраняться на файловой системе. При следующем запуске приложения эти данные должны быть считаны приложением и доступны пользователю для работы.
Задача #
Разработать веб-приложение, решающее задачу по отображению большого объёма данных по указанной тематике. Приложение должно:
- Отображать стартовую страницу с описанием предметной области.
- Обеспечить отображение ключевых списков данных приложения:
- Отображать список на отдельной странице.
- Список должен быть отсортирован по порядку добавления элемента, если не указано иначе.
- Элементы списка на данной странице должны показывать минимально необходимый объём информации.
- На странице со списком реализовать постраничный вывод информации.
- На странице со списком обеспечить фильтрацию данных минимум по двум параметрам.
- Реализовать переход к странице с детальной информацией об элементе.
- Отображать список на отдельной странице.
- На странице с детальной информацией об элементе необходимо:
- Отображать все поля элемента в удобном для восприятия виде.
- Реализовать переход к странице информации о связном элементе или списке элементов.
- Реализовать отображение элементов связных списков.
- На всех страницах должен присутствовать блок навигации, позволяющий переходить между стартовой страницей и ключевыми страницами приложения.
- Приложение должно позволять изменять каждый отображаемый список данных (минимум 2 ключевых списка приложения):
- Пользователю должна быть доступна возможность добавления элементов в список.
- Пользователю должна быть доступна возможность редактирования элемента в списке.
- Пользователю должна быть доступна возможность удаления элементов из списка.
- При добавлении и редактировании данных приложение должно выполнять техническую и логическую проверку данных. При возникновении ошибки ввода приложение должно показать форму со всеми данными, введёнными пользователем, и сообщениями об ошибках ввода.
- При удалении данных приложение должно запрашивать у пользователя подтверждение действий. Для удаления пользователю необходимо совершить минимум два действия.
Приложение должно корректно обрабатывать любые запросы от клиента.
Список сущностей для приложения следует брать из задачи к лабораторной работе № 3.