mt-cod / php-project-lvl2
hexlet php-package
Requires
- ext-curl: *
- docopt/docopt: ^1.0
- symfony/yaml: ^5.2
- tightenco/collect: ^8.34
Requires (Dev)
README
目标
计算差异 – 一个真正能够提升经验丰富开发者技能的项目。在这里,不得不面对复杂的架构决策,自动化测试和持续集成,函数式编程,处理树形数据结构和递归算法。
数据结构和算法
在代码中选择正确的数据结构是成功架构和简洁代码的关键之一。这取决于分析的便利性和处理,以及条件语句的数量和复杂性。
项目中的主要问题是如何描述文件之间的差异的内部分配,使其尽可能方便。尽管存在许多不同的方法,但只有其中一些方法会导致简洁的代码。
处理树和树形递归极大地提升了算法思维能力。这很重要,因为实际处理涉及到持续的数据处理、各种转换和集合输出。
架构
要比较两个结构之间的差异,需要进行许多操作:读取文件、解析输入数据、构建差异树、生成所需输出。
除了内部架构,本项目还需要处理命令行参数。这涉及到对操作系统(特别是命令行解释器)的深入理解。为了组织这部分代码,使用了流行的库 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