Skip to content

Latest commit

 

History

History
107 lines (68 loc) · 7.39 KB

HomeExercise.md

File metadata and controls

107 lines (68 loc) · 7.39 KB

Задание TagsCloudContainer

Сделай fork этого репозитория и работай в нем.

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

В облаке не должно быть повторяющихся слов, размер слова должен быть тем больше, чем чаще встречается слово, не должно быть "скучных" слов (предлогов, местоимений, ...).

Используй алгоритм из блока про TDD.

Ограничения

Точки расширения

В промышленном программировании при разработке далеко не всегда разумно создавать точки расширения "на будущее". Чаще руководствуются принципами YAGNI и KISS, поддерживая код как можно проще, а абстракции создаются и внедряются в код только в момент, когда понадобилось расширить функциональность.

Тем не менее для учебных целей в этой задаче требуется заранее предусмотреть точки расширения для наиболее вероятных потенциальных изменений в твоем продукте. Результат твоей работы должен быть расширяем без модификации уже имеющегося кода (Принцип OCP).

Полиморфизм вместо условных операторов

Запрещено использовать операторы if, switch, ?: и прочие условные операторы, если их можно заменить полиморфизмом.

Dependency injection

Для сборки зависимостей используй любой DI Container, отличный от Ninject. Можно воспользоваться Microsoft.Extensions.DependencyInjection или довольно распространенным di контейнером Autofac. В выборе di контейнера может помочь статья IoC Container Benchmark - Performance comparison.

Тесты

Все нетривиальные части покрой модульными тестами. Добавь несколько более крупных тестов, проверяющих работу всей программы в сборе.

Функциональные требования и их возможные изменения

Ниже описаны обязательные пункты и пункты на перспективу. Выполни обязательные требования, а потом выбери и реализуй несколько понравившихся пунктов на перспективу.

Даже если требование из перспективы не выполнено, соответствующая точка расширения в вашем коде уже должна быть.


Обязательные пункты:

Исходный текст:

  • Источником данных должен быть файл со словами по одному в строке.

Предобработка слов:

  • На этапе предобработки, приведи все слова к нижнему регистру и исключи скучные слова

Формат результата:

  • В качестве результата программа должна генерировать png-файл.
  • Должна быть возможность задать цвета, шрифт и размер изображения.

Алгоритм

  • Сделай так, чтобы по одному тексту можно было сгенерировать несколько облаков тегов с помощью разных алгоритмов или одного алгоритма с разными настройками.

GUI или Console:

  • Организуй код так, чтобы было легко сделать оба вида клиентов — и клиента командной строки, и GUI приложение с вводом параметров и интерактивным просмотром.
  • Реализуй одного клиента по выбору

Пункты на перспективу:

Исходный текст:

  • поддерживать разные форматы файлов (txt, doc, docx, ...)

Предобработка слов:

  • дать возможность влиять на список скучных слов, которые не попадут в облако.
  • поддерживать ввод данных из литературного текста, с приведением слов в начальную форму.
  • дать возможность выбирать только определенные части речи (например, только существительные)

Формат результата:

  • поддерживать разные форматы изображений.
  • поддерживать разные алгоритмы расцветки слов.

Алгоритм:

  • реализовать несколько алгоритмов формирования облака тегов.

GUI или Console:

  • реализуй второго клиента.

Критерии оценивания:

0 баллов - в решении отсутствует метод Main для запуска приложения, падающие тесты, не выполнены обязательные требования требования

1 балл - в решении есть какие-то проблемы, выполнены обязательные требования

2 балла - хорошо выполнены обязательные требования

3 балла - выполнены основыные пункты и реализованы минимум два пункта на перспективу из разных разделов.


Дополнительные ссылки