带你读《2022技术人的百宝黑皮书》——跨桌面端之组件化实践(4)https://developer.aliyun.com/article/1340323?groupCode=taobaotech
事件订阅
事件订阅派发,依赖base::event实现,是典型的观察者模式。当事件触发时,按照注册顺序挨个调用观察者的base::callback,可以非常容易的完成复杂流程串联。这里的event是实例级别的,配合prg的账号隔离能力,可以很好的解决多账号业务的事件派发问题。但目前base::event暂不支持按优先级注册派发。
class IxxxService : public prg::IPrgCOMRefCounted { public: base::event<void()> onDataChanged; public: virtual bool GetData(const std::string& data) = 0; } // 获取组件 scoped_refptr<IxxxService> spInterface; prg::PrgCOMGetInstance(c_uuidof(xxxService), instanceName, spInterface); // 订阅组件事件 CBaseEventHelper::RegisterEvent(spInterface->onDataChanged, callback); // 取消订阅组件事件 CBaseEventHelper::UnRegisterEvent(spInterface->onDataChanged);
prg框架的组件约束
prg::com组件要遵循什么约束条件?
不同类型的组件,标准是不一样的,要说组件标准,首先要对组件进行分类。
以阿里旺旺应用为例,跨端旺旺包含的组件,大致可以分成以下几类:
框架层:
- ali系pc应用基础组件
- 平台相关基础组件
框架和基础组件,是阿里系pc应用基座,这些组件由prg框架内置,从而实现快速搭建pc跨端应用的能力。
应用层:
- 旺旺业务-非UI组
- 旺旺业务-UI组件
应用层组件,主要用来实现业务功能,这部分组件经常要进行扩展和修改,是我们要重点关注的。应用层组件,根据其技术实现,又可以分成ui相关和ui无关两种,ui组件会相对更加复杂。
(ps:UI组件上采用pv分层,p层负责控制界面逻辑,使用纯c++实现,view层只负责绘制和操作输入,这样在最 大程度复用代码,提高效率的同时,保证业务双端一致。我们的ui组件都遵从这个标准。我们选用了Qt作为跨端UI 框架,我们发现,Qt并不能做到UI功能完全跨端,考虑到后续替换UI框架或适配新平台的可能性,我们把Qt的使用范围收敛在UI渲染部分,即view层。)
带你读《2022技术人的百宝黑皮书》——跨桌面端之组件化实践(6)https://developer.aliyun.com/article/1340321?groupCode=taobaotech