/ Programming

Hexlet projects review. part 2

Итак на hexlet позавчера завершился второй проект, решил отписать отзыв по нему тоже. Что это, и как проходила первая часть писал чуть выше.

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

Само приложение — это простая версия юниксовой утилиты diff, предназначенная для сравнения двух конфигурационных файлов (поддержка .json, .ini, .yaml).
В самом начале мы реализовывали плоскую структуру сравнения, что было относительно не сложной задачей (поизучал паттерн проектирования “адаптер” и отличную библиотеку lodash), которая дает просто уйму маленьких, но очень полезных функций по работе с разными структурами данных, по ней есть неплохая статья, а так же разные парсеры используемых форматов). Но вот когда мы перешли к файлам с вложенной структурой и выборке форматов вывода, вот тут началось настоящее испытание, на одном из шагов застрял практически на 2 суток.

Переосмысливая проблемы возникшие передо мной, я сейчас понимаю, что очень тяжело дается построение правильных абстракций в моем приложении. К примеру вначале у меня была функция, которая получает данные, сравнивает и сразу же делает из них готовый вывод, что в случае нашей задачи, не верно.
В конечном итоге, как только я разделил сравнение данных (тут пришлось поглубже поработать с ast-деревом, программа представляет внутренние данные после сравнения именно в нем) вывод стало намного проще. При выборке форматов вывода, познакомился с паттерном стратегия.
Классов в моем приложении по прежнему нет, хотя кое что можно было реализовать через них, но не обязательно.
В целом проект в очередной раз дал многократный толчок в моем понимании “проектирования архитектуры” приложений, как я по прежнему это называю, ну и тут еще больше пригодилась помощь ментора, которым вновь выступал Кирилл, за что ему огромное спасибо. Конечный результат в репозитории.
Кстати количество проектов сократилось до 3, после чего будет что то вроде дипломной работы, следующий стартует 13/02, после чего вернусь с ощущениями.