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-09-16 17:04:22 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、stlish 和 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