egametang
从你的只言片语中,我努力悟道了一下。你看我悟得对不对,如果可以的话,希望你还能回复我一下。
ET的核心思想之一是树状结构,核心目标之一是抛弃OOP。我从这个出发点去捋,为何要抛弃传统的事件注册/注销方式。
如果表现层对象,采用传统的注册/注销方式的话,那么可能存在父类 A 注册了某个事件,但是子类 B 不需要注册,而子类的子类 C 又需要注册。 那么就会出现:
1,需要在 A 中针对该事件做响应。 而 B 需要将响应的函数 overwrite成空函数,而 C 需要再次重写响应。
2,又或者,B需要在注册函数中,注销事件。 而C需要在注册函数中,再次注册事件。导致实际执行了注册+注销+注册的蛋疼操作。
而以上操作,极容易在后续修改中被破坏导致BUG。又或者接手的人看得莫名其妙,怒骂祖传屎山。
而ET的做法,是采用树状结构,那么事件的响应,统一由响应事件的父节点向下面的叶子节点分发。具体应该分发给哪些叶子节点,由叶子节点的上一级父节点决定。
以UI为例。UIComponent作为父节点,管理了所有的UI对象。当某UI事件抛出,由UIComponentSystem响应,在UIComponentSystem中,判断UIComponent上哪些UI是打开的,那么向这些打开的UI分发。而已经关闭的UI则不分发。本质上就实现了UI的 打开->注册 关闭->注销的这个过程。
至于不同的UI响应要做的事情不一样,这是由不同的XXXUIComponentSystem的接口实现差异来实现。
不知道我说的对不对。