Лабораторная работа № 2

Лабораторная работа № 2 #

Проверяемые знания #

  • Знание основ языка HTML.
  • Умение структурировать HTML-документы.
  • Знание основ языка CSS.
  • Умение применять классы CSS к HTML-элементам.
  • Умение подключать внешние CSS-файлы к HTML-документу.
  • Умение использовать CSS-стили фреймворка.
  • Умение формировать динамические HTML-страницы на основе данных.
  • Умение считывать информацию из структурированных файлов.
  • Знание основ маршрутизации HTTP-запросов с помощью библиотеки http4k.
  • Умение обрабатывать GET и POST-запросы с помощью библиотеки http4k.
  • Умение формировать динамические HTML-страницы с помощью шаблонизатора.
  • Умение корректно обрабатывать параметры, приходящие от пользователя:
    • Через маршруты к документам.
    • Через параметры маршрута.
    • Через содержимое интерактивной HTML-формы, приходящей в теле запроса.
  • Умение применять средства статического анализа кода Kotlin: ktlint и detekt.
  • Умение писать модульные тесты для проверки логики HTTP-обработчиков.

Требования к лабораторной работе #

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

Задача #

Разработать веб-приложение, решающее задачу по отображению большого объёма данных по указанной тематике. Приложение должно:

  1. Отображать стартовую страницу с описанием предметной области.
  2. Обеспечить отображение основного списка данных приложения:
    1. Отображать список на отдельной странице.
      • Список должен быть отсортирован по порядку добавления элемента, если не указано иначе.
      • Элементы списка на данной странице должны показывать минимально необходимый объём информации.
    2. На странице со списком реализовать постраничный вывод информации.
    3. На странице со списком обеспечить фильтрацию данных минимум по двум параметрам.
    4. Реализовать переход к странице с детальной информацией об элементе.
  3. На странице с детальной информацией об элементе необходимо:
    1. Отображать все поля элемента в удобном для восприятия виде.
    2. Реализовать переход к странице информации о связном элементе или списке элементов.
    3. Реализовать отображение элементов связных списков.
  4. На всех страницах должен присутствовать блок навигации, позволяющий переходить между стартовой страницей и ключевыми страницами приложения.

Приложение должно корректно обрабатывать любые запросы от клиента.

Список сущностей для приложения следует брать из задачи к лабораторной работы № 1.

© A. M. Васильев, 2024, CC BY-SA 4.0, andrey@crafted.su