Skip to content

Commit

Permalink
docs: add notes for transflow
Browse files Browse the repository at this point in the history
  • Loading branch information
phodal committed Dec 27, 2021
1 parent f52a3a1 commit 690ad3d
Showing 1 changed file with 22 additions and 25 deletions.
47 changes: 22 additions & 25 deletions examples/quake_book/0003-transflow.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,26 +6,26 @@ order:
author:
---

## Two-phase
## Two-phase:二阶段式转换

二阶段式转换
Transflow 的设计起源于:[类型流(TypeFlow)——世俗化的函数式编程和改进的过程式设计](https://zhuanlan.zhihu.com/p/341089716)》,在 Typeflow 有几个主要的规则:

Transflow 的设计起源需要那篇《[类型流(TypeFlow)——世俗化的函数式编程和改进的过程式设计](https://zhuanlan.zhihu.com/p/341089716)》说起。Typeflow 有几个主要的规则:


1. 从可视化模型上就可以看出:共存在4个待实现的函数,其中两个纯函数,参数校验和返回结果包装;一个副作用函数,保存代办事项;还有一个输入端口,即把这个几个函数编排起来完成业务的程序入口。
1. 从可视化模型上就可以看出:共存在 4 个待实现的函数,其中两个纯函数,参数校验和返回结果包装;一个副作用函数,保存代办事项;还有一个输入端口,即把这个几个函数编排起来完成业务的程序入口。
2. 每个函数有明确的输入输出类型
3. 函数之间通过匹配的输入输出类型连接起来。
4. 输入输出类型使用业务人员能够理解的业务概念,从而符合DDD的要求。
5. 可视化

简单来说,在有了设计之后,我们可以为功能生成对应的有输入和输出的函数,并可以通过规则将它们匹配起来。原理,就是这么简单。
在有了设计之后,我们可以为功能生成对应的有输入和输出的函数,并可以通过规则将它们匹配起来。原理,就是这么简单。

## Transflow DSL: any data to any component

## Transflow 初识:DSL 生成代码
在 Quake 中拥有:

回到 Quake 的场景里,我们有固定的数据源,即不同的 entry。与此同时我们还有不同的用于展示这些数据的组件。
- 任意的数据源,即不同的 entry
- 任意的展示组件:即 Quake component。

然后,我们所需要做的便是,提供一个从数据流向组件的规则,即 Transflow DSL。
随后,只提供一个从数据流向组件的规则,就可以实现 any to any,因此,Quake 中设计了 Transflow DSL。

### Transflow 示例

Expand Down Expand Up @@ -63,18 +63,26 @@ const tl_temp_1 = async (context, commands) => {

代码逻辑上是:


1. 创建一个新的 Quake Calendar 组件(Web Component)
2. 获取 todo、blog 相关的数据
3. 执行对应的数据转换规则
4. 将数据传递给组件
5. 添加可访问的路由

这样一来,只需要跳转到相应的路由即可。如果需要的话,也可以直接生成临时的组件。另外一部分,则是由 Web Components 所构建的组件体系,我们将会在另外一篇文章中展开介绍。
这样一来,只需要跳转到相应的路由即可。如果需要的话,也可以直接生成临时的组件。另外一部分,则是由 Web Components 所构建的组件体系。

## 目标函数式的 Transflow

既然,我们是对数据流进行操作,那么理想情况下,Transflow 的 DSL 就可以设计为向函数式靠齐。不过,当前,我们还没有理由实现这么复杂的功能,可以在后续展开。

## From..to

### 多条 Transflow
`from` 用于定义数据源,当前支持的方式:

(PS:虽然尚未进行测试,但是我相信它当前是**** work 的)
* Quake 自定义的 Entry 类型
* RESTful API (待完善)

### 实现二次聚合 - 多条 Transflow

如果有多条 Transflow 规则时:

Expand Down Expand Up @@ -104,17 +112,6 @@ function from_record_to_quake_calendar(records) {

Transflow 生成的代码,面临的最大问题是数据量大时的性能问题,但是 Quake 的场景下,不会有这样的问题。

## 目标函数式的 Transflow

既然,我们是对数据流进行操作,那么理想情况下,Transflow 的 DSL 就可以设计为向函数式靠齐。不过,当前,我们还没有理由实现这么复杂的功能,可以在后续展开。

### From

`from` 用于定义数据源,当前支持的方式:

* Quake 自定义的 Entry 类型
* RESTful API (待完善)

### Filter

在 filter 方面,我做了一些简化设计(\~~~偷懒~~\~),因为需要的是搜索引擎,可以可以直接使用搜索引擎的 fliter 功能。在评估了多个 filter-parser 的库之后,我发现没有理由在当前做这么复杂的设计。所以,针对于一些特别的过滤条件做了一些特别的处理。
Expand Down

0 comments on commit 690ad3d

Please sign in to comment.