README.md

Project №1

Основные принципы ООП, GRASP, SOLID, порождающие паттерны, структурные паттерны, mocking.

Цель

Отработать реализацию структурных паттернов, применить их совместно с ранее изученным материалом.

Задание

  • Реализовать объектную модель корпоративной системы распределения сообщений, используя на практике отрабатываемый теоретический материал
  • Покрыть полученное решение функциональными авто-тестами

Формулировка

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

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

Сообщение

  • Имеет заголовок
  • Имеет тело
  • Имеет уровень важности

Топик

  • Имеет название
  • Имеет адресатов
  • В топик можно отправить сообщение, он должен передать его адресату

Адресат

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

Пользователь

  • Является конечной точкой сообщения
  • Пользователь может иметь некоторые атрибуты (не обязательно для контекста лабораторной)
  • Должна быть возможность отправить пользователю сообщение
  • Пользователь должен отслеживать полученные сообщения, и их статус (прочитано, не прочитано) (статус сообщения существует только в контексте пользователя)
  • Пользователь должен иметь возможность отметить сообщение прочитанным
    Отметить такое сообщение можно только в статусе не прочитано, попытка отметить прочитанное сообщение должна обрабатываться

Мессенджер

  • Является конечной точкой сообщения
  • Должен иметь возможность выводить текст Для целей лабораторной можно просто выводить текст в консоль с припиской “мессенджер”

Дисплей

  • Является конечной точкой сообщения
  • Должен иметь возможность выводить текст заданного цвета
    Дисплей должен держать лишь одно сообщение, поэтому перед выводом его необходимо очищать

Дисплей-драйвер

  • Должен иметь возможность очистить вывод
  • Должен иметь возможность задать цвет выводимого текста
  • Должен иметь возможность записать текст

Не функциональные требования

  • Реализация логгирования должна быть тестируемой например, проверить вывод на консоль при вызове некоторых поведений в авто-тестах - невозможно
    нужно иметь возможность реализовать в тестах mock-тип, который будет вести счётчик вызовов
  • Реализация мессенджера и дисплея должна быть тестируемой
  • Реализация мессенджера и дисплея должна быть изолирована
    Эти реализации не должны иметь явной или неявной зависимости на логику доставки сообщений, ведь они являются сторонними интеграциями
    Их реализации должны находиться в отдельных папках
  • Вывод на дисплей должен быть реализован как вывод на консоль так и вывод в файл \

Definition of done

  • Реализованы все функциональные требования
  • Реализация соответствует всем не функциональным требованиям
  • Реализация не нарушает принципы SOLID, следует основным принципам ООП
  • Использованы структурные паттерны
  • Корректно использован порождающий паттерн
  • Реализованы все тест-кейсы

Test cases

  • При получении сообщения пользователем, оно сохраняется в статусе “не прочитано”
  • При попытке отметить сообщение пользователя в статусе “не прочитано” как прочитанное, оно должно поменять свой статус
  • При попытке отметить сообщение пользователя в статусе “прочитано” как прочитанное, должна вернуться ошибка
  • При настроенном фильтре для адресата, отправленное сообщение, не подходящее под критерии важности - до адресата дойти не должно (в данном тесте необходимо использовать моки)
  • При настроенном логгировании адресата, должен писаться лог, когда приходит сообщение (в данном тесте необходимо использовать моки)
  • При отправке сообщения в месенджер, его реализация должна производить ожидаемое значение (в данном тесте необходимо использовать моки)
  • Добавляются два адресата-пользователя (для одного пользователя), для одного из них настраивается фильтр важности, при попытке отправить сообщение с важностью ниже настроенной – пользователь получает значение единожды.

Конвейеры
0 успешных
0 с ошибкой