Необходимо разработать приложение и написать к нему тесты согласно следующим требованиям:
Разработать классы Точка и Фигура. Создать методы и тесты: вычисления площади и периметра фигуры; является ли фигура той именно фигурой по определению; пересекает ли фигура только одну из осей координат на заданное расстояние etc.
- Разработка классов: Создать классы
PointиShape. Разработать классы, реализующие функциональность, определённую индивидуальными заданиями (например, классы для вычисления площади и периметра фигуры). При решении задачи для создания entity-классов использовать паттерн Factory Method. - Entity-классы: Классы-сущности следует реализовать так, чтобы они не содержали бизнес-логики (методы вычислений, поиска и т.д.).
- Идентификация: Фигура должна содержать поле
idилиname. - Чтение данных: Параметры для создания объектов читать из файла (.txt). Часть данных должна быть некорректной. Если встретилась некорректная строка, приложение должно переходить к следующей строке. Файлы не должны находиться вне каталогов.
- Валидация:Разработать классы-валидаторы для проверки результатов вычислений параметров фигур, а также для валидации исходных данных для создания объектов entity-классов. Например: корректная строка в файле для создания объекта Круг: «1.0 2.0 3.0», где первое второе – координаты центра, третье - радиус круга; некорректная строка в файле для создания объекта Круг: «2a.0 3.0 4.1» - недопустимый символ «z», всю строку следует считать некорректной здесь и в случаях приведенных ниже; некорректная строка в файле для создания объекта Круг: «1.0 2.0» - недостаточно информации для создания объекта (можно использовать значение по умолчанию, н-р: 1); некорректная строка в файле для создания объекта Круг: «1.0 2.0 -3.0» - невозможно создать Круг с отрицательным радиусом.
- Файловая структура: Все файлы должны быть организованы в папках в корне проекта. Использовать относительные пути.
- Исключения: Использовать пользовательские классы исключений для обработки ошибок.
- Логирование: Использовать библиотеку
pinoдля логирования. Логи должны записываться в консоль и файл. - Тестирование: Код должен быть покрыт unit-тестами с использованием
JestилиMocha. Использовать больше одного expect на каждый тест кейс.
- Кодстайл: Следовать общепринятым конвенциям кода TypeScript, использовать eslint, с одной из популярных конфигураций, например от airbnb.
- Статическая типизация: Использовать возможности TypeScript для статической типизации для повышения надёжности и читаемости кода.
- Импорты: Использовать ES6 модули для организации кода.
- Константы: Имена неизменяемых констант должны быть написаны заглавными буквами, изменяемые - в camelCase.
- Регулярные выражения: Хранить в константах.
- Исключения: Не испускать стандартные исключения. Всегда обрабатывать исключения с помощью блоков
try/catch.
- Фигуры должны быть ориентированы в пространстве параллельно осям и плоскостям координат, чтобы упростить вычисления.
- Использование
ifиelseдолжно соответствовать структуре положительного и отрицательного сценариев. - При объявлении переменных следует немедленно присваивать им значения.
- В if, for, while обязательно использовать { }
- Если генерируется exception, с помощью throw, не ловить его сразу же
- В finally не генерировать исключения и не использовать return
- Не увлекаться статическими методами
- Использовать различные виды expect
- Тест должен иметь структуру: given, when, then, где given – прекондишены (инициализация данных), when – вызов тестируемого метода (всегда одна строчка), then – посткондишн (assert-метод)
Разработать классы Точка и Треугольник. Создать методы и тесты: вычисления площади и периметра треугольника; составляют ли точки треугольник (не лежат ли точки на одной прямой); является ли треугольник прямоугольным, равнобедренным, равносторонним, остро/тупоугольным.
Разработать классы Точка и Конус. Создать методы и тесты: вычисления площади поверхности фигуры и ее объема, а также соотношения объемов получаемых в результате рассечения фигуры координатной плоскостью; является ли объект заданной фигурой; находится ли основание фигуры на одной из координатных плоскостей.