最新文章

OpenRewrite 学习笔记(三):重构配方 Recipe 与访问者 Visitor

OpenRewrite 学习笔记(三):重构配方 Recipe 与访问者 Visitor

今天这篇我们来学习配方 Recipe 和访问者 Visitor,之所以一起介绍这两个是因为在 Recipe 的设计中使用了 访问者模式(Visitor Pattern)。 访问者模式是一种将算法与对象结构分开的软件设计模式。得益于这种分离,在将新操作添加到现有对象结构中时,无需修改对象结构。它是面向对象编程和软件工程中遵循开放/封闭原则的一种方法。 – 维基百科 配方 Recipes 配方(Recipe)是一组可对 无损语义树(LST) 执行搜索和重构操作的逻辑集合。配方既可以代表一个独立的微小变更,也可以与其他配方组合,形成实现更复杂目标(如框架迁移)的大型改造方案。 OpenRewrite 提供了一个托管环境,用于发现、实例化和配置配方。在实现搜索或重构操作时,配方会委托给访问者(Visitor),由其负责抽象语法树(LST)的遍历和操作。 在第一篇的快速上手中,我们使用了配方 ChangeMethodName 将方法 hello 名改为 gretting。 扫描配方 Scanning Recipe 这是一个特别的 Recipe。如果一个 Recipe 需要生成新的源文件或者需要在进行更改前查看所有源文件,那它必须是 ScanningRecpie。 在实现层面 ScanningRecipe 扩展了 Recipe ,添加两个关键对象:accumulator 和 scanner。 accumulator 是由 Recipe 自身来定义的数据结构,用于存储 Recipe 运行时所需的任何信息。 scanner 是一个用数据来填充 accumulator 的 Visitor #visitor 除了两个对象外,ScanningRecipe 还提供了方法定义 getScanner() 这个方法需要子类来实现,返回值也是一个访问者 Visitor(在后面我们会介绍)。

About Me

张晓辉

英文名 Addo。 资深程序员,LF APAC 开源布道师,CNCF Ambassador,云原生社区管委会成员,公众号“云原生指北”作者,微软 Azure MVP。 曾任职于汇丰软件、唯品会、数人云、小鹏汽车,有多年的微服务和基础架构实践经验,主要工作涉及微服务、容 …

进一步了解