mapper
是对于用于实体与实体之间数据映射的一种对象,mapper
使用MQL
描述实体与实体之间的数据映射。
映射就是从一个或多个实体中选取部分属性,然后将选取的部分属性经过重组或计算然后更新目标实体的状态。
- Actor:实体的运行时,维护实体的状态和提供的操作。
- maper: Actor与Actor之间数据映射的执行实例。
- computed: mapper内的计算模块,通过输入计算输出。
- SourceActor:在映射中提供变更数据的Actor,如图中的Actor1。
- TargetActor:在映射中作为映射目标的Actor,如图中的Actor2。
我们通过对此过程的分析,可将这一过程分为三部分:
- 写复制传递实体属性的变更。
- 将属性的变更作为输入计算映射结果。
- 将映射计算结果更新到Actor。
采用宏观的视角看来,实体与实体之间的数据映射就是从一个或多个SourceActor
中选取部分属性作为输入,通过重组或计算得到输出,然后将输出更新到TargetActor
。而我们可以对这一过程进行概括,来自SourceActor
的输入组成一个Json
数据,映射
的输出是一个Json
,那么此时我们发现我们所做的映射其实就是从SourceActor
拿到输入Json
,通过一定的转化规则
将输入Json
转化成另一个输出Json
,然后在将输出的Json
更新到TargetActor
。
我们通过对此过程的分析,可将这一过程分为三部分:
- 从一个或多个
SourceActor
中选取部分属性,选取的数据可以构成一个json
。 - 以选取的数据作为
mapper
的输入,执行mapper
并输出一个json
。 - 将
mapper
执行的输出作为反馈更新目标实体的状态。
我们知道mapper
执行分为选取输入
,计算输出
,更新目标Actor状态
三个阶段。为了满足这三个阶段,我们给mapper
引入两个核心概念:MQL
和tentacle
,MQL
是mapper
的核心组件用于描述映射中json的转化规则,执行计算。tentacle
译为触手
,用于映射第一阶段中的属性变更的同步。
对于 Tentacle
在定义TQL
的时候我们有时候就能够指代清楚我们定义的选取的实体或属性,我们可能需要通过结合服务节点的上下文计算解析才能得到结论。
在结合服务节点上下文解析的时候,我们分为动态和静态两种方式。
mapper通过解析MQL
生成tentacle
,mapper
为每一个SourceActor
生成一个tentacle
用于同步属性变更。
在我们设计的系统中,实体与实体之间的数据是可以相互传递的,对于上行数据而言,是对真实状态的扩散和传递,但是对于下行的调用数据,其实一个期望值向下传递的过程,是否需要Ack,需要desired? 同事实体的调用属性是否会处于占用
状态?