带你读《2022技术人的百宝黑皮书》——跨桌面端之组件化实践(4)

简介: 带你读《2022技术人的百宝黑皮书》——跨桌面端之组件化实践(4)

带你读《2022技术人的百宝黑皮书》——跨桌面端之组件化实践(3)https://developer.aliyun.com/article/1340324?groupCode=taobaotech


image.png组件生命管理                                                                

prg组件支持无感跨模块创建、使用、释放对象,真正做到了一次开发,到处使用,开箱即用。

 

prg组件使用scoped_refptr引用计数管理内存,使用者不需要自行管理内存。

prg框架支持跨dll/dylib创建、使用、释放对象,对使用者来说dll/dylib是完全无感的,指定要创建的对象类型,接口类型,实例名称,就可以直接开始使用这个接口了,非常丝滑。


class IxxxService : public prg::IPrgCOMRefCounted
{
public:
base::event<void()> onDataChanged; public:
virtual bool GetData(const std::string& data) = 0;
}
// 创建prg::com组件新实例scoped_refptr<IxxxService> spInterface;
prg::PrgCOMCreateInstance(c_uuidof(xxxService), spInterface);
// 获取prg::com组件(没有则create,prg框架内部会保存一份引用) scoped_refptr<IxxxService> spInterface; prg::PrgCOMGetInstance(c_uuidof(xxxService), instanceName, spInterface);
// 判断prg::com组件实例是否存在prg::PrgCOMHasInstance(c_uuidof(xxxService), instanceName, bhave);
// 删除prg::com组件实例prg::PrgCOMDropInstance(c_uuidof(xxxService), instanceName);


我们一般会将组件获取封装成像下面这样的接口,对于使用者来说,调接口就像调用自己的代码一样方便。

/// 组件头文件
inline scoped_refptr<IxxxService> GetIxxxService()
{
scoped_refptr<IxxxService> spInterface; prg::PrgCOMGetInstance(c_uuidof(UIAppGuideWidget), "", spInterface); return spInterface;
}
/////////////////////////////////////////////////////////////////////////
// 其他组件直接调用接口std::string data;
GetIxxxService()->GetData(data);

 

image.png组件间通信              prg组件的接口调用和事件订阅。

 

接口调用

prg组件接口调用与com组件类似,区别在于prg::com做了更好用的封装,可以直接get到I接口对象进行使用。

(当然还是支持使用QueryInterface,可以通过QueryInterface获得不同类型的I接口)

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);
// 调用组件方法
spInterface->GetData(callback);

 

带你读《2022技术人的百宝黑皮书》——跨桌面端之组件化实践(5)https://developer.aliyun.com/article/1340322?groupCode=taobaotech

相关文章
|
Web App开发 移动开发 前端开发
带你读《2022技术人的百宝黑皮书》——跨桌面端Web容器演进(1)
带你读《2022技术人的百宝黑皮书》——跨桌面端Web容器演进(1)
104 1
带你读《2022技术人的百宝黑皮书》——跨桌面端之组件化实践(8)
带你读《2022技术人的百宝黑皮书》——跨桌面端之组件化实践(8)
|
存储 iOS开发 MacOS
带你读《2022技术人的百宝黑皮书》——跨桌面端Web容器演进(2)
带你读《2022技术人的百宝黑皮书》——跨桌面端Web容器演进(2)
129 0
|
JavaScript Android开发 C++
带你读《2022技术人的百宝黑皮书》——跨桌面端Web容器演进(3)
带你读《2022技术人的百宝黑皮书》——跨桌面端Web容器演进(3)
|
缓存 小程序 前端开发
带你读《2022技术人的百宝黑皮书》——跨桌面端Web容器演进(5)
带你读《2022技术人的百宝黑皮书》——跨桌面端Web容器演进(5)
104 0
|
开发框架 开发工具 Windows
带你读《2022技术人的百宝黑皮书》——跨桌面端之组件化实践(1)
带你读《2022技术人的百宝黑皮书》——跨桌面端之组件化实践(1)
带你读《2022技术人的百宝黑皮书》——跨桌面端之组件化实践(5)
带你读《2022技术人的百宝黑皮书》——跨桌面端之组件化实践(5)
带你读《2022技术人的百宝黑皮书》——跨桌面端之组件化实践(5)
|
XML 数据格式 C++
带你读《2022技术人的百宝黑皮书》——跨桌面端之组件化实践(3)
带你读《2022技术人的百宝黑皮书》——跨桌面端之组件化实践(3)
带你读《2022技术人的百宝黑皮书》——跨桌面端之组件化实践(10)
带你读《2022技术人的百宝黑皮书》——跨桌面端之组件化实践(10)
|
ARouter 微服务 Windows
带你读《2022技术人的百宝黑皮书》——跨桌面端之组件化实践(2)
带你读《2022技术人的百宝黑皮书》——跨桌面端之组件化实践(2)
112 0