Данное задание долгое время служило нам верой и правдой — по результатам его выполнения мы приняли на работу несколько разработчиков.
Постановка задачи
Необходимо разработать упрощенный вариант Text Report System для создания параметризованных текстовых отчетов.
Входные данные
- Файл с шаблоном отчета.
- JSON/XML/INI-файл, содержащий значения текстовых параметров. Формат этого файла — произвольный и подразумевается, что ошибок форматирования в нем не будет.
Выходные данные
- Файл со сгенерированным отчетом (можно отчет выводить просто на экран).
- Лог-файл, содержащий сообщения об ошибках и записи об успешной генерации отчета .
Файл «Шаблон отчета»
Шаблон отчета – это простой текстовый файл. Проблему локализации можно не решать — считая, что весь текст у нас на английском языке. В этом файле в произвольном тексте размещены параметры в виде следующей конструкции:
Тескт {параметр1} текст {параметр2} текст {*параметр3}
Можно считать, что символы “{}” никогда не появляются в произвольном тексте.
Обязательные параметры отмечаются символом “*”. Обязательным является тот параметр, без значения которого отчет генерироваться не должен. Для обязательных текстовых параметров их значение должно присутствовать в JSON/XML/INI-файле. Если параметр не является обязательным и его значение не удалось получить — в отчет подставляется пустая строка.
Ниже приведен пример шаблона отчета
Здравствуйте {*user_name},Большое спасибо, что вы решили воспользоваться услугами нашей компании. Ваш заказ номер {*order_number} будет доставлен через 10 рабочих дней после {current_date}. С Уважением, Администрация интернет магазина. |
Типы параметров отчета
Параметры отчета могут быть двух видов
- Текстовые параметры. В этом случае для работы с ними достаточно совпадения имени параметра в файле шаблона отчета и в JSON/XML/INI-файле без учета регистра.
- Функциональные параметры. Представляют собой результат вызова предопределенной функции. Допустимы только зарегистрированные в программе имена подобных параметров, каждому из которых соответствует вызов определенной функции. При попадании имени функционального параметра в JSON/XML/INI—файл должна генерироваться ошибка. (В рамках тестового задания должна быть реализована только одна функция – возвращающая current_date. Формат даты времени – произвольный).
Необходимо разработать структуру данных для хранения параметров в памяти и регистрации функциональных параметров.
Логирование
Как часть проекта необходимо разработать класс, реализующий функциональность логирования. Для упрощения — лог сообщения и ошибки могут выводиться на экран. Логируется факт успешной генерации отчета и перечисленные ниже ошибки.
- Если в процессе генерации отчета любой из обязательных параметров не получил значения.
- Если имя зарегистрированного функционального параметра попало в JSON/XML/INI-файл.
- Если вызов функции, инициированный функциональным параметром привел к ее внутреннему исключению.
- Ошибка чтения файла отчета
- Ошибка чтения JSON/XML/INI-файла
При возникновении любой из этих ошибок — отчет не создается.
Возможные дополнительные вопросы
- Как бы вы реализовали хранение параметров в шаблоне отчета при условии, что символы “{}” могут присутствовать в произвольном тексте?
- Как расширить вашу реализацию для добавления новых типов параметров?
В вашем решении мы ждем применения удачной объектно ориентированной декомпозиции.
Удачи!!!