lailongwei / llbc

一个简洁、高效、跨平台、多语言支持的服务端开发框架,面向Service及Component,底层c++实现。
MIT License
104 stars 33 forks source link

【llbc】LLBC_Component方法收敛 #124

Closed lailongwei closed 6 months ago

lailongwei commented 1 year ago

当前LLBC_Component事件方法设计上,存在以下两个问题:

  1. 事件方法除了Component流程必要的OnInitOnDestroyOnStartOnStopOnUpdateOnIdle外,其他所有方法都是跟特定功能相关,方法众多,使得LLBC_Component看上去过于复杂且耦合过大,后期扩展也会使得事件方法接口不受控膨胀
  2. 事件方法只能由框架定义并使用,业务在使用LLBC_Component时,如果两个业务逻辑组件有强事件交互,将没有办法使用这一套事件方法机制,只能借助LLBC_EventManager之类的方式来传递,这使得LLBC_Component事件方法机制受限(即不能开放给业务使用),一个例子:
    • 业务有一个自己的网络组件,所有上层业务组件都使用这个网络组件进行通讯,这个组件名字叫XXXNetComp,它有两个最基本的事件:OnXXXNetConnect/OnXXXNetDisconnect,如果没有通用的事件方法机制,那么其他组件编写者只能在自己组件的OnInit方法中进行eventMgr.AddListener(...)这样的弱关联写法,导致代码相对复杂及臃肿

方法收敛的一种方式:

reckfullol commented 1 year ago

@lailongwei 想和 Jack 讨论下 OnEvent 的实现方案.

我的设想是 "A Component" 发起一个 ComponentEvent 到 Service. Service 维护 ComponentEvent 队列, 收到 ComponentEvent的时候放到队列末尾, 下一帧的时候逐个调用所有 Component 的 OnEvent 方法.

Component 的 OnEvent 实现中, 根据传入的 ComponentEvent.type "switch case" 实现对应事件的自有逻辑.