Closed lailongwei closed 6 months ago
@lailongwei 想和 Jack 讨论下 OnEvent 的实现方案.
我的设想是 "A Component" 发起一个 ComponentEvent 到 Service. Service 维护 ComponentEvent 队列, 收到 ComponentEvent的时候放到队列末尾, 下一帧的时候逐个调用所有 Component 的 OnEvent 方法.
Component 的 OnEvent 实现中, 根据传入的 ComponentEvent.type "switch case" 实现对应事件的自有逻辑.
当前LLBC_Component事件方法设计上,存在以下两个问题:
OnInit
、OnDestroy
、OnStart
、OnStop
、OnUpdate
、OnIdle
外,其他所有方法都是跟特定功能相关,方法众多,使得LLBC_Component
看上去过于复杂且耦合过大,后期扩展也会使得事件方法接口不受控膨胀LLBC_Component
时,如果两个业务逻辑组件有强事件交互,将没有办法使用这一套事件方法机制,只能借助LLBC_EventManager
之类的方式来传递,这使得LLBC_Component事件方法机制受限(即不能开放给业务使用),一个例子:OnXXXNetConnect
/OnXXXNetDisconnect
,如果没有通用的事件方法机制,那么其他组件编写者只能在自己组件的OnInit方法中进行eventMgr.AddListener(...)这样的弱关联写法,导致代码相对复杂及臃肿方法收敛的一种方式:
OnXXX()
外,只提供一种事件方法OnEvent()
,框架跟业务统一使用,这样达到了所有方法收敛的效果,业务派遣事件、处理事件也变得更简单