Skip to content

qoter/di

 
 

Repository files navigation

Домашняя задача по управлению зависимостями

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

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

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

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

Дополнительные ограничения

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

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

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

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

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

Dependency injection

Для сборки зависимостей используйте любой DI Container, отличный от Ninject. Довольно распространенные контейнеры — Autofac и Castle Windsor.

Тесты

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

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

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

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

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

  • Источником данных должен быть файл со словами по одному в строке.
  • В перспективе — поддерживать разные форматы файлов (txt, doc, docx, ...)

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

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

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

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

Алгоритм

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

GUI или Console

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

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 100.0%