Skip to content

Latest commit

 

History

History
24 lines (14 loc) · 2.19 KB

code-generation-pipeline_CN.md

File metadata and controls

24 lines (14 loc) · 2.19 KB

代码生成流水线

English | 简体中文

根据 Martin Fowler 在《Domain-Specific Languages》中的定义,代码生成的策略包括基于转换器和基于模版的代码生成。前者是指采用通用编程语言如 Go、Python 进行文本处理,更加灵活多变;后者是指通过编写模版 DSL 生成代码,因为模版具有和目标代码类似的结构,因此可读性更优。

UCloud 在代码生成的实践中,同时支持两种生成策略。转换器用于构建领域语义模型,即模型到模型的生成,例如文档中心需要额外的导航信息,转换器从外部系统获取该信息并进行语义模型变换。模版则用于模型到代码的生成,例如文档中心的 Markdown 文档。明确了适用场景后,可以让关联团队的职责更加清晰,模版较低的书写成本,也使得非研发团队可以参与模版的设计和修改,极大程度提高了工程效率。

下方是代码生成流水线的示意图:

Code Generation Pipeline

图中红色的文字代表需要录入/开发的部分,绿色的文字代表代码生成的过程。

  • 产品业务部门录入 API 文档后,由特定的内部开发者工具转换为一个标准化的中间表示。
  • 基于中间表示生成各语言的 SDK/CLI,这一阶段,完成了命令式(Imperative)API 的交付。
  • 工具产品研发团队,通过编写API 的调和(Reconcile)逻辑,实现从命令式到声明式(Declarative)API 的转换。
  • 基于声明式 API,构建 Terraform 云供应商插件,生成 CDK 类工具。
  • 最终将所有工具信息抽取到统一的存储中,暴露给 SaaS 类的应用和开发者工具来使用。

以上环节完成了开发者工具全线产品的自动化生成。图中橙色的文字表示已完成待发布的产品,蓝色的文字表示 Q4 Roadmap 中的特性,所有产品的状态和路线图都可以在 Github 中获取。

基于代码生成流水线的软件交付,使工具的构建成本,从 M*N 优化至 M+N,同时职责更加清晰,从根本上改变了云服务提供商在工具成本效率上面临的困境。