Skip to content
gqlxj1987's Blog
Go back

流程引擎解析(1)

Edit page

整个流程引擎应该分为三个部分,config, context组成构成process的基本部分,template作为整个process串联的基础,生成weavable,然后通过weavable,并辅助相关的scm的状态,最后拼接成一串的process节点,即完成整个流程的渲染过程。


这里有部分不能理解的是上线方式居然是从icafe中获取,而不是从baseinfo中获取。这里影射出icafe同baseinfo之间的关系若即若离,icafe既想同baseinfo切除关系,但是又很多的内容依赖于baseinfo,这层关系还需慢慢梳理,慢慢切除。
		
* 完成了template部分的解析,就会得到两个比较重要的变量,即
`` List<Weavable> weavables `` 和`` Map<String, Config> configMap `` ,前者即为流程串联的list,后者为相关的config信息,后面就是weaver部分,这部分就是将这两者加入scm的一些辅助状态,一起串联成为我们所谓的process串。同样,这个串联过程大致分为三个部分:
	1. context的相关信息的初始化。前面讲到了context里存放着process的上下文环境,这里主要是一些scm的状态。这里拿到的是scmProcessContext,实际上映射着DefaultScmContext(吐槽一句:这个东西能不能相同命名,不然还需要去xml去寻找相应的对应关系,命令的规范遵循的是什么。。。),这里拿到`` codePath ``和
`` codeVersion ``,以及最重要的`` Map<String, ScmOperateBean> scmOperates ``但是,在这个串联的后续步骤中,个人感觉这个东西没有用到。。
	2. 随后便是遍历` List<Weavable> weavables `结构,首先从相关的` configMap `依据相应的` weavable `的key值取得相应的config,然后通过

	```java
	process = (Process) applicationContext.getBean(beanName, Process.class);
	```
	
	
来初始化相应的process,同时将process加入到`Map<String, Process> processMap`中。
随后,从processMap中选取第一个节点作为headProcess返回即可。
	 	  		
感想:
	
* context这个变量的设计感觉毫无头绪。首先对于`scmOperates`的初始化,可以放在template的解析中,同样也是属于状态的解析;其次,对于`processMap`,依然可以放在template的解析中;这样导致就是process中的context变量还有没有意义?
* 对于processMap的设计初衷是什么?既然是遍历weavables,然后按顺序将生成的process加入到processMap中去,为什么不继续复用weavables,而要另开一个map?	
* 对于`SqaTaskTemplateAdapter`这个结构的extends关系,感觉不是很理解,为后面的扩展性的需要有什么帮助?直接作为引擎的一个实现,这才是他的核心吧
	
* 得到headProcess之后,然后就是processRender的工作。这方面没什么好说的。


至此,整个流程模板的渲染过程大致介绍完毕。下图是流程的介绍说明。

Edit page
Share this post on:

Previous Post
流程引擎解析(2)
Next Post
写作训练