总线是什么?



总线有很多种:CommandBus、EventBus、DataBus、ControlBus、AddressBus等
如果整个系统是棵树,那么命令和事件唯有捕获和冒泡,子节点的事件唯有向上传播给自己的父节点,同样父节点捕获的命令要么自己处理要么向下传播给自己的子节点的直到那个可以处理这个命令的节点,命令被任何节点处理后即变为了事件,命令是捕获输入的流程,事件是冒泡输出的流程。

这种严格的沿着树的捕获和冒泡有时候不够高效,所以树上的每一个节点上都可以接入到那条红色的总线上去。从而把树展开为线,解决捕获和冒泡不高效的问题

然而有了事件总线后,就可以把那个经过了那么多节点的数据传播流程简化为只有一个操作的hash定位了
总线可能就是虫洞吧

【渡劫】首席.net工程师 2014/12/8 14:07:38
图上红色的线表示总线,这条线可以被想象成一个点,收缩为一个点,对于那棵树上的任何对象来说总线都只是一个点
14:09:43
【渡劫】首席.net工程师 2014/12/8 14:09:43
那棵树上的事物都只能沿着那棵树运动,永远脱离不了那棵树,但是树上的每个节点上我们都给它接入一条总线,这条总线在那个节点看来只是一个点,只是一个总线对象的引用。
这个点就是虫洞。

总线是底层的技术设施,不是业务设施,那棵业务树上的任何事物都不知道总线长什么样,因为它们只能在那棵业务树上运动永远脱离不了那个维度的限制,总线并不是一个点,但是对于那棵树上的任何事物来说总线都表现为一个点。
穿越那个点的领域对象通过底层技术设施的帮助可以瞬间到达整棵树的任何位置,看起来就像人们所想象的虫洞一般所以比作虫洞。

总结得好,虫洞可以穿越时空啊。这种树形结构在实时大数据处理如Storm中有应用。

在Anycmd中可以明确的找到CommandBus、EventBus
而DataBus、ControlBus、AddressBus可以认为是CLR
如果明确的抽象出DataBus、ControlBus、AddressBus是有好处的话,可以考虑将它们从CLR中移除掉,明确的拿出来。
anycmd的方法跟html dom + javascript惊人的一致。这种一致肯定是由于更深层的某种道理决定的,或许就是那个构造定律决定了anycmd是这个样子的。html dom是静态的结构树,javascript是动态的行为树(栈、闭包就是树)。想象中人们以后构建大型系统的时候所使用的知识估计就跟现在的前端工程师所修炼的知识差不多。
这两棵树,一棵对于右脑友好的图形结构树,一棵对于左脑友好的抽象行为树。两棵树是相辅相成的关系,努力将图形结构树构建好可以大大降低行为树的复杂度,反之亦然。