Проект

Валидатор данных

ООП на Javascript

Создание собственной библиотеки для проверки корректности (валидации) данных – отличный способ прокачать навыки проектирования кода, в особенности, объектно-ориентированной архитектуры. Создание правильных иерархий классов, глубокая работа с this, расширяемая архитектура, применение принципов SOLID, использование fluent-интерфейса – все это предстоит делать в проекте

2-4
недели

Цель

Валидатор данных – проект, направленный на прокачку проектирования архитектуры в объектно-ориентированном стиле. Здесь вам понадобится применять практически все, чему вы научились в курсах по ООП: проектирование структуры классов, композиция объектов, возможно наследование и, обязательно, fluent-интерфейс. Вам придется задумываться о глобальном и локальном состоянии, думать о расширяемости кода без его переписывания, соблюдать SOLID принципы.

Описание

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

Пример использования:

const v = new Validator();

// строки
const schema = v.required().string();

schema.isValid('what does the fox say'); // true
schema.isValid(''); // false

// числа
const schema = v.required().number().positive();

schema.isValid(-10); // false
schema.isValid(10); // true

// объект с поддержкой проверки структуры
const schema = v.shape({
  name: v.string().required(),
  age: v.number().positive(),
});

schema.isValid({ name: 'kolya', age: 100 }); // true
schema.isValid({ name: '', age: null }); // false

// Добавление нового валидатора
const fn = (value, start) => value.startsWith(start);
v.addValidator('string', 'startWith', fn);

const schema = v.string().test('startWith', 'H');

schema.isValid('exlet'); // false
schema.isValid('Hexlet'); // true

Предметно-ориентированные языки (DSL)

Интерфейс библиотеки для валидации – яркий пример DSL, специализированного языка, позволяющего декларативно (описательно) описывать то, что вы хотите от кода. Код, написанный в таком стиле, читается значительно легче, чем работа с прямым созданием объектов. Во многом этот подход базируется на паттерне fluent-интерфейс.

Архитектура

Ключевая часть внутренней архитектуры – организация валидаторов. Эту задачу можно решить множеством разных способов, но только некоторые из них дают по-настоящему удобную и расширяемую структуру без излишней сложности. Проектируя архитектуру, крайне легко перестараться и сделать что-то очень сложное.

Как и любая взрослая библиотека для валидации – наш проект поддерживает расширяемость через добавление новых правил проверок. Это довольно важное архитектурное решение, от которого зависит, насколько код будет удобным в сопровождении и простым в работе.

Тестирование и Отладка

Автоматизированные тесты – неотъемлемая часть профессиональной разработки. Валидатор данных – идеальный проект для прокачки навыка тестирования. Он достаточно простой и удобный для написания тестов, и достаточно сложный для того, чтобы прочувствовать важность этих тестов во время рефакторинга и отладки. В отличие от практики Хекслета, здесь предстоит писать тесты самостоятельно. Причем это можно делать до кода, практикуя TDD.

Для написания тестов используется фреймворк Jest

Сколько стоят проекты?

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

Зачем проходить проекты?

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

Проекты — портфолио программиста. Их код останется в вашем аккаунте на GitHub и будет преимуществом при поиске работы.

Чтобы узнать о том, что такое проекты и в чём их польза, прочитайте нашу статью «Анатомия проектов Хекслета».

Что делать, если возникли трудности во время выполнения проекта?

Задавайте вопросы в разделе «Обсуждение» на странице шага, на котором возникли трудности, или вашему наставнику. Изучите вопросы других студентов в «Обсуждениях»: там собрана большая база знаний, ей можно и нужно пользоваться.

Кто проверяет проекты?

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

У меня другой вопрос

Нажмите на виджет в правом нижнем углу экрана и поищите ответ в нашей справке. Или сразу пишите на support@hexlet.io — вам ответит живой человек из команды Хекслета.