Решение для Text Report System (C++)

Опубликовано May 30, 2013 в Загрузка кода проектов, Наши старые тестовые задания, Тестовые проекты (2-3 часа) | Нет комментариев

, , ,

Решение для Text Report System (C++)

В посте Система создания отчетов (Text Report System) сформулировано условие задачи про систему построения отчетов. Как обычно, мы приводим решение наших тестовых заданий. Выложенный здесь код – это один из реальных вариантов успешного,  с нашей точки зрения, выполнения тестового задания. Он характерен таким дизайном классов, аналоги которого наиболее часто выбирались соискателями. Приведенная реализация  имеет определенные недочеты, но в целом выполняет свое основное предназначение, демонстрируя приемлемый проходной уровень.

Ссылку для загрузки полного исходника в виде проекта для VS 2010 можно взять здесь

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

  • ... обращаем серьезное внимание на правильное применение в решении принципов ООП;
  • … нужно объектное решение для хранения параметров отчета;
  • … функции, соответствующие функциональным параметрам, должны вызываться непосредственно в момент генерации отчета.

1) Структурные решения вместо ООП-решений

В решении должны присутствовать классы, спроектированные с учетом основных правил ООП. А для вызова функциональных параметров не годятся структурные конструкции, использующие if (или switch), похожие на нижеприведенный код.

string currentDate(void){
	//Implementation
}
 
string testFuncPar(void){
	//Implementation
}
 
	//ВЫЗОВ
	if (someVar = "current_date")
		str = currentDate(void);
	if (someVar = "test_func_par")
		str = testFuncPar(void);
 
	// И ТАК ДАЛЕЕ

2) Двойная регистрация функциональных параметров

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

3) Неверный вызов функций для функциональных параметров

В условии задана единственная конкретная функция, соответствующая функциональному параметру, которая вычисляет дату/время. Зачастую эта функция вызывалась один раз на этапе регистрации функциональных параметров. Дальше, ее значение сохранялось как строка и использовалось во всех отчетах. При таком подходе невозможно развивать решение, если эти функции должны выдавать  разные значения для разных отчетов.

4) Забыты обработка исключений и логирование

В условии эта функциональность присутствует. Описана она в общем-то самым стандартным образом, и, наверное, поэтому о ней часто просто забывали. Особенно часто забывалась реализация для места “…вызов функции, инициированный функциональным параметром, привел к ее внутреннему исключению…”.


Автор публикации:

Оставить комментарий

Ваш адрес email не будет опубликован.


*