mt-cod/php-project-lvl2

hexlet php-package

v1.0.2 2021-08-16 09:25 UTC

This package is auto-updated.

Last update: 2024-04-16 16:00:56 UTC


README

Actions Status PHP%20CI Latest Stable Version
Code Climate Issue Count Test Coverage

Цель

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

Структуры данных и Алгоритмы

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

Главный вопрос в проекте – как описать внутреннее представление дифа между файлами, так чтобы оно было максимально удобно. И хотя для этого существует множество разных способов, лишь некоторые из них приводят к простому коду.

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

Архитектура

Для построения дифа между двумя структурами нужно проделать множество операций: Чтение файлов, парсинг входящих данных, построение дерева различий, формирование необходимого вывода.

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

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

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

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

Описание

Вычислитель отличий – программа, определяющая разницу между двумя структурами данных. Это популярная задача, для решения которой существует множество онлайн-сервисов, например: http://www.jsondiff.com/. Подобный механизм используется при выводе тестов или при автоматическом отслеживании изменении в конфигурационных файлах.

Возможности утилиты:

  • Поддержка разных входных форматов: yaml и json
  • Генерация отчета в виде plain text, stylish и json

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

# формат plain
$ gendiff --format plain path/to/file.yml another/path/file.json

Property 'common.follow' was added with value: false Property 'group1.baz' was updated. From 'bas' to 'bars' Property 'group2' was removed

# формат stylish $ gendiff filepath1.json filepath2.json

{

follow: false setting1: Value 1 setting2: 200 setting3: true setting3: { key: value } setting4: blah blah setting5: { key5: value5 } }

Аскинемы с примерами:

Сравнение плоских файлов (JSON) - asciinema
Сравнение плоских файлов (yaml) - asciinema
Stylish формат - asciinema
Плоский формат - asciinema
Вывод в json - asciinema