单一世界架构初探之主动模式

前端之家收集整理的这篇文章主要介绍了单一世界架构初探之主动模式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

主动模式在大型服务系统中,是完全必须的。在设计模式中,有个监听模式可以概括这种情况,而不完全如此。在监听模式中,往往需要先往目标注册,然后 根据目标的状态变化,由目标通知监听者。但在这里,监听者却并不知道需要监听哪些东西。也就是说监听者和被监听者之间往往没有固定和必然的联系。

我 们可以想象,当一个人进入白骨荒野,这是个眼界很开阔的地图,对于你的进入,已经在白骨荒野的人应该可以看到你的存在,而事实上,他们并不会向你注册他是 否监听你,你也不需要监听他的存在。之所以我们举这个例子,是因为白骨荒野比较大。任何一个进入这个地区的人来说,他不可能知道所有在这个地区的人,注册 就无从说起了。

这是个很矛盾的事情,因为对于你和一个你并不知道的人来说,你们两个的关系并不是由你们自己决定的,而是由你们同处于一个视野这个事实决定的。因此我们需要一个管理器,负责模拟生成客观世界需要生成的事实,就像进入视野这种事情。我们在前面的讨论过程,有个很重要的原则,就是减少关联性,比如N个实体之间,关联性将为(N-1)^2,如果存在一个管理器,那么实体之间只有N个关联。

我们假设白骨荒野有个事件管理器,那么当所有进入白骨荒野的人,都会向管理器注册,由管理器判断并且产生事件。我感觉这个模式有些问题,但还没有仔细研究。从理论上来说,应该具有很好的优点,很简单,这种方式减少了关联度,必然减少由此引起的计算量,可同样会导致复杂度。

我们在前面讨论过数据抽象的事情,试图将所有的实体抽象并表格化,同时还会每个字段绑定一个函数,这个函数可能会被外界驱动,比如客户端的键盘操作。当一个角色行走时,那么行走函数会被调用,新的坐标可以通过这个函数通知给管理器,这种方法让我们在很高的实时性以及很小的粒度上获取主动性。

管理器的存在是个很麻烦的事情,因为他具备全局属性,给我们试图将所有局部化的理论带来很大的颠覆,同样的,管理器为我们提供方便的主动模式。

考虑暴风城和闪金镇2个分区,我们无法假设他们具备同一个管理器,因为这样会导致我们必须假设西部荒野也使用这个管理器,以致于整个世界都是用相同的管理器。为了更变态一点,我们将白骨荒野切割成2个分区AB,在分区的边缘各站1个人P1/P2,显然,管理器模式无法解决这种情况,因为一个分区的管理器无法知道另外一个分区的信息。P1就站在P2面前,却不知道P2在转身,显然很荒谬。

这里有2个方案,方案1是让分区管理器将某些事件向周围进行广播,需要广播哪些事件,由分区管理器决定,这个方案使得管理器是扁平的,但可能导致广播风暴。

方案2是在分区管理器之上,建立一个公共的父管理器,由父管理器负责决定向哪些分区发播哪些事件。这个方案可以降低事件广播的量,但管理器就比较多,呈树状结构。个人感觉方案2更具竞争力,可以更多架构上的好处。

猜你在找的设计模式相关文章