两个封装组件之间的通信

Communication between two encapsulated components

本文关键字:组件 之间 通信 封装 两个      更新时间:2023-10-16

我有三个组件 - 渲染系统,物理模拟和UI。UI 代码是用脚本编写的,不受信任。现在,我需要将物理模拟的结果传达给渲染系统,并且不确定正确的设计。例如,我可以简单地在每个刻度将新的 sim 数据复制到渲染器中。但是,这似乎有点浪费。我可以将渲染器设置为直接对 sim 的数据进行操作,但这似乎违反了封装。

我打算让这个系统与潜在的数千个移动单元一起工作,所以值得记住性能。

如何在不违反封装的情况下快速将数据从一个组件移动到另一个组件?

我可能会让渲染器分配对象来保存渲染所需的数据。这些对象将定义一个可见的接口,该接口足以让渲染器完成其工作,但在其他方面是不透明的。即使对象本身由渲染器分配/拥有,它们也大多是不透明的类型。

模拟器拥有这些对象内部的知识(至少在需要比公共接口显示的更多的知识时(。渲染器基本上只是从它们读取数据,模拟器可以/将修改它们的状态/向它们写入数据。

实现这一点的一种方法是对"中间"对象使用多重继承。其中一个父级提供有限的公共接口供呈现器使用,另一个父级提供更全面的接口供模拟器使用。

当然,就像本质上任何有C++本身提供的保护一样,这基本上只是防止意外,而不是故意颠覆。我假设您对渲染器缺乏信任基本上是为了防止可能的错误,而不是可能试图故意破坏安全性的渲染器。如果你需要防止后者,你几乎需要至少使用操作系统级别的机制,例如模拟器和渲染器在不同的进程中,它们之间有某种IPC(但是,当然,这几乎不可避免地会增加相当多的开销(。