两个封装组件之间的通信
Communication between two encapsulated components
我有三个组件 - 渲染系统,物理模拟和UI。UI 代码是用脚本编写的,不受信任。现在,我需要将物理模拟的结果传达给渲染系统,并且不确定正确的设计。例如,我可以简单地在每个刻度将新的 sim 数据复制到渲染器中。但是,这似乎有点浪费。我可以将渲染器设置为直接对 sim 的数据进行操作,但这似乎违反了封装。
我打算让这个系统与潜在的数千个移动单元一起工作,所以值得记住性能。
如何在不违反封装的情况下快速将数据从一个组件移动到另一个组件?
我可能会让渲染器分配对象来保存渲染所需的数据。这些对象将定义一个可见的接口,该接口足以让渲染器完成其工作,但在其他方面是不透明的。即使对象本身由渲染器分配/拥有,它们也大多是不透明的类型。
模拟器拥有这些对象内部的知识(至少在需要比公共接口显示的更多的知识时(。渲染器基本上只是从它们读取数据,模拟器可以/将修改它们的状态/向它们写入数据。
实现这一点的一种方法是对"中间"对象使用多重继承。其中一个父级提供有限的公共接口供呈现器使用,另一个父级提供更全面的接口供模拟器使用。
当然,就像本质上任何有C++本身提供的保护一样,这基本上只是防止意外,而不是故意颠覆。我假设您对渲染器缺乏信任基本上是为了防止可能的错误,而不是可能试图故意破坏安全性的渲染器。如果你需要防止后者,你几乎需要至少使用操作系统级别的机制,例如模拟器和渲染器在不同的进程中,它们之间有某种IPC(但是,当然,这几乎不可避免地会增加相当多的开销(。
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 如何将 txt 文件中的行分隔为组件C++
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 大小相等但成员数量不同的结构之间的性能差异
- 本机C++类与 WinRT 组件(引用类)之间的自动映射
- Microsoft Visual C 可再发行组件包和运行时包之间有什么区别
- WinRT 组件内C++类之间的互操作
- 如何在组件之间共享公共类和非公共函数
- 图形组件之间的路径算法
- 两个封装组件之间的通信
- C#和C++之间的Windows(Phone)运行时组件流
- 基于组件的游戏对象的阵列和地图之间的优点和缺点
- 在 <T>winrt 组件中的 IVector^ 和 C 样式字节数组之间进行转换
- 组件之间如何进行有效的通信