Мы начинаем серию лабораторных работ по разработке приложений с использование фреймворка Spring. Все работы будут посвящены одной бизнес модели - "Магазин продажи товаров для животных" 🐈. Шаг за шагом приложение будет усложняться, в нем, на практике, будут использоваться те знания, которые вы почерпнете из лекций и дополнительных материалов.
В данной работе необходимо создать каркас приложения и разобраться с конфигурированием Spring приложений на основе Java-классов. Также вы напишите загрузчик CSV файлов который нам понадобиться в дальнейшем.
Перед началом работы ознакомитесь с правилами выполнения и сдачи лабораторных работ
-
Скачайте и установите Axiom Standard JDK 17.0.14 (предпочтительно) или Temurin JDK 17.0.14. Используйте руководство по установке.
-
Скачайте и установите Gradle 8.12. Используйте руководство по установке.
-
С помощью Gradle, в директории les02/lab создайте проект вид Java Applications, для этого воспользуйтесь руководством Building Java Applications Sample.
Проект должен иметь следующие параметры .
- java пакет - ru.bsuedu.cad.lab (пакет задается так -
gradle init --package ru.bsuedu.cad.lab, остальное в процессе настройки проекта) - Project name - product-table
- Type - Application
- Language - Java
- Java version - 17
- Structure - Single application project
- DSL - Kotlin
- Test framework - JUnit Jupiter
- java пакет - ru.bsuedu.cad.lab (пакет задается так -
Внимание, при создание проекта согласитесь на перезапись файлов.
-
Добавьте в ваш проект библиотеку org.springframework:spring-context:6.2.2
-
Реализуйте приложение удовлетворяющее следующим требованиям:
- Приложение должно представлять собой консольное приложение разработанное с помощью фреймворка Spring и конфигурируемое с помощью Java-конфигурации.
- Приложение должно читать данные о товарах для магазина из csv-файла и выводить его в консоль в виде таблицы (см. рисунок).
CSV-файл должен располагаться в директории src/main/resources вашего приложения.
- Структура приложения должна соответствовать следующей диаграмме классов
classDiagram
note "Товары для зоомагазина"
Reader <|.. ResourceFileReader
Parser <|.. CSVParser
ProductProvider <|.. ConcreteProductProvider
ConcreteProductProvider o-- Parser
ConcreteProductProvider o-- Reader
Renderer <|.. ConsoleTableRenderer
ConsoleTableRenderer o-- ProductProvider
ProductProvider .. Product
Parser .. Product
class Product {
+long productId
+String name
+String description
+int categoryId
+BigDecimal price
+int stockQuantity
+String imageUrl
+Date createdAt
+Date updatedAt
}
class Reader{
+ String read()
}
<<interface>> Reader
class ResourceFileReader {
+ String read()
}
class Parser{
+ List[Product] parse(String)
}
<<interface>> Parser
class CSVParser {
+ List[Product] parse(String)
}
class Renderer{
+void render()
}
<<interface>> Renderer
class ConsoleTableRenderer {
- ProductProvider provider
+void render()
}
class ProductProvider {
+ List[Product] getProducts()
}
<<interface>> ProductProvider
class ConcreteProductProvider{
- Reader reader
- Parser parser
+ List[Product] getProducts()
}
где,
- Reader, ResourceFileReader - класс читающий данные из csv-файла;
- Parser, CSVParser - класс парсер CSV файла;
- ProductProvider, ConcreteProductProvider - класс предоставляющий список товаров;
- Renderer, ConsoleTableRenderer - класс выводящий список товаров в консоль в виде таблицы;
- Product - класс описывающий сущность "Товар"
За основу возьмите приложение из лекции
- Приложение должно запускаться с помощью команды
gradle run, выводить необходимую информацию в консоль и успешно завершаться. - Оформите отчет о выполнении лабораторной работы в виде файла README.md в директории les02/lab.
- Spring. Определение, назначение, особенности
- Проблемы ручной сборки приложений
- Перечислите известные вам вам системы автоматической сборки. Кратно расскажите про каждую из них
- Типовая структура Java проекта
- Типы зависимостей в Gradle
- Что такое принцип инверсии управления. Для чего применяется
- В чем отличие инверсии управления от внедрения зависимостей
- Принципы инверсии управления. Перечислите, кратко расскажите про каждый
- Сцепление (Coupling) и связность (Cohesion)
- Какой принцип внедрения зависимости желательно использовать и почему
