2

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

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

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

4

1 回答 1

0

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

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

一种实现方式是对“中间人”对象使用多重继承。其中一个父级提供有限的公共接口供渲染器使用,另一个提供更全面的接口供模拟器使用。

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

于 2012-05-11T16:34:03.517 回答