Проект: приложение, получающее на вход csv-файл со адресами фотографий в Интернете и операцией для каждой фотографии. Каждая картинка скачивается на локальный диск, к ней применяется действие и результат сохраняется в указанной папке.
Процесс обработки файла может состоять из следующих шагов:
Чтение файла с помощью FileProcessor (FileService?)
Скачивание файлов из интернета на локальный диск (DownloadService)
Применение соответствующего каждому файлу действия, action (ImageProcessor)
Сохранение результата
Приложение должно соответствовать следующим требованиям:
Testability: весь процесс должен быть тестируемым, вместо зависимостей может инициализироваться с моками, чье поведение настраивается. Использовать Inversion of Control (IoC)
Extensibility: В приложение можно добавлять новые действия (actions), при этом код приложения не должен меняться. Использовать encapsulation, inheritance, Factory Pattern.
Вопросы:
Куда сохранять файлы?
Как назвать сохраненные файлы?
Как изменится приложение, если мы захотим параметризовать действия? Например, если мы захотим указать ширину фото в пикселях для действия THUMBNAIL?
Как изменится приложение, если нужно обрабатывать локальные файлы?
Как распараллелить скачивание файлов? Что такое Blockingqueue и Multithreading.
Ключевые темы для решения:
Reading a text file in Java
Download an image using Java
How to save a Java image to a file on the disk?
How to resize a jpg in Java?
How to grayscale an image in Java?
SOLID principles
Inversion of Control
JUnit
Mockito
What is Factory Pattern in Java?
How to model actions so that our application is action-independant?
Проект: приложение, получающее на вход csv-файл со адресами фотографий в Интернете и операцией для каждой фотографии. Каждая картинка скачивается на локальный диск, к ней применяется действие и результат сохраняется в указанной папке.
Пример таблицы:
Процесс обработки файла может состоять из следующих шагов:
Приложение должно соответствовать следующим требованиям:
Вопросы:
Ключевые темы для решения: