tel-ran-de / BE10-Basic

Basic Java Group 10
1 stars 8 forks source link

A project: Command Line Image Processor #34

Open sergeylukichev opened 4 years ago

sergeylukichev commented 4 years ago

Проект: приложение, получающее на вход csv-файл со адресами фотографий в Интернете и операцией для каждой фотографии. Каждая картинка скачивается на локальный диск, к ней применяется действие и результат сохраняется в указанной папке.

Пример таблицы:

https://s3-eu-west-1.amazonaws.com/lukaroundimg/beelitz2017/1a.jpg GRAYSCALE
https://s3-eu-west-1.amazonaws.com/lukaroundimg/beelitz2017/9a.jpg THUMBNAIL
http://s3-eu-west-1.amazonaws.com/lukaroundimg/zirm2/1.jpg PREVIEW

Процесс обработки файла может состоять из следующих шагов:

  1. Чтение файла с помощью FileProcessor (FileService?)
  2. Скачивание файлов из интернета на локальный диск (DownloadService)
  3. Применение соответствующего каждому файлу действия, action (ImageProcessor)
  4. Сохранение результата

Приложение должно соответствовать следующим требованиям:

  1. Testability: весь процесс должен быть тестируемым, вместо зависимостей может инициализироваться с моками, чье поведение настраивается. Использовать Inversion of Control (IoC)
  2. Extensibility: В приложение можно добавлять новые действия (actions), при этом код приложения не должен меняться. Использовать encapsulation, inheritance, Factory Pattern.

Вопросы:

  1. Куда сохранять файлы?
  2. Как назвать сохраненные файлы?
  3. Как изменится приложение, если мы захотим параметризовать действия? Например, если мы захотим указать ширину фото в пикселях для действия THUMBNAIL?
  4. Как изменится приложение, если нужно обрабатывать локальные файлы?
  5. Как распараллелить скачивание файлов? Что такое Blockingqueue и Multithreading.

Ключевые темы для решения:

  1. Reading a text file in Java
  2. Download an image using Java
  3. How to save a Java image to a file on the disk?
  4. How to resize a jpg in Java?
  5. How to grayscale an image in Java?
  6. SOLID principles
  7. Inversion of Control
  8. JUnit
  9. Mockito
  10. What is Factory Pattern in Java?
  11. How to model actions so that our application is action-independant?