• Uknow | 优维低代码:Custom Processors 自定义加工函数


    导语

    优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。

    连载第二十七期

    《高级指引:Custom Processors 自定义加工函数

    # 背景

    在编排微应用时,经常需要进行数据加工,有时候需要编写数十行、甚至数百行的代码,无论是在求值表达式 <% ... %> 还是在 script-brick 中编写,都无法保障代码的可维护性、质量可靠性等基本要求,同时其复用成本也较高。Custom Processors 正是为了解决这个问题。

    说明

    一个 Custom Processors 实际是一个全局注册的、具有特定业务属性的纯函数,它应只负责加工处理数据,因此它有以下要求:

    • 注册的名称需要加上包名作为 namespace,以避免可能的冲突;

    • 不能使用异步方法;

    • 不应产生副作用;

    • 编写单元测试。

    # 与 Pipes 管道的区别

    Pipes 管道 是由框架直接提供的全局注册的纯函数,看起来和 Custom Processors 很像,它们的区别主要是 Pipes 由框架直接提供,具有通用性的加工函数才会纳入框架,而 Custom Processors 由构件包提供,通常具有特定的业务属性、而不具备通用性。

    # 示例

    在 next-* 相关仓库中使用脚手架工具 yarn yo 并选择 a new custom processor 可以快速创建一个 Custom Processor。

    初始化好的 Custom Processor 大约长这样:

    // @file: next-*/bricks/your-package/src/custom-processors/modelsToGraph.tsimport { getRuntime } from "@next-core/brick-kit";
    export function modelsToGraph(models: ModelData[]): Graph {  // Some hard work.}
    // A camelCase of the package name namespace is auto generated to avoid name collisions.getRuntime().registerProcessor("yourPackage.modelsToGraph", modelsToGraph);

    编写单元测试:​​​​​​​

    // @file: modelsToGraph.spec.tsimport { modelsToGraph } from "./modelsToGraph";
    describe("modelsToGraph", () => {  it("should work", () => {    expect(modelsToGraph(models)).toEqual(...);  });});

    编排时,可以在任意表达式中使用:​​​​​​​

    - brick: "your.any-brick"  properties:    someProp: "<% PROCESSORS.yourPackage.modelsToGraph(CTX.models) %>"

    框架现在在 Storyboard 的表达式中支持了 Pipeline Operators (Minimal version),对于连续的加工处理可以使用类似以下的方式编写:​​​​​​​

    - brick: "your.any-brick"  properties:    someProp: |-      <%        CTX.modelsYamlString          |> PIPES.yaml          |> PROCESSORS.yourPackage.modelsToGraph          // 如需在 pipeline operators 中传递额外参数,可以自行包装一个箭头函数。          |> (_ => PIPES.jsonStringify(_, null, 2))      %>

    Custom Processors 是构件包的资源,和普通构件类似,框架会根据 Micro App 的使用情况,自动按需加载相关的构件包。

  • 相关阅读:
    linux基础4---内存
    Linux安装Zookeeper
    班级校园网页设计作业 静态HTML我的班级网页 DW班级网站模板下载 大学生简单班级网页作品代码 我的大学网页制作 学生班级网页设计作业
    python应用(3):读取excel文件并导出为json文件
    【操作系统】进程控制
    能带你起飞的【数据结构】成王第十篇:二叉树3
    【C++】STL 标准模板库 ① ( STL 简介 | STL 基本概念 | STL 主要内容 )
    通过netty实现scoket客户端
    使用文本编辑器解决Word文档加密后忘记密码问题
    linux的网络服务之DHCP
  • 原文地址:https://blog.csdn.net/EasyOps_DevOps/article/details/127693822