我有三个组件 - 渲染系统,物理模拟和UI。 UI代码是用脚本编写的,不受信任。现在我需要将物理模拟的结果传达给渲染系统,并且不确定正确的设计。例如,我可以简单地将新的sim数据复制到每个tick的渲染器。然而,这似乎有点浪费。我可以设置渲染器直接对sim的数据进行操作,但这似乎违反了封装。
我打算让这个系统与潜在的数千个移动单元一起工作,因此值得记住性能。
如何在不违反封装的情况下快速将数据从一个组件移动到另一个组件?
答案 0 :(得分:0)
我可能让渲染器分配对象来保存渲染所需的数据。这些对象将定义一个足以让渲染器完成其工作的可见界面,但在其他方面是不透明的。尽管对象本身是由渲染器分配/拥有的,但它们大部分都是不透明的类型。
模拟器拥有这些对象内部的知识(至少如果需要的知识多于公共接口所显示的知识)。如果渲染器基本上只是从它们读取数据,模拟器可以/将修改它们的状态/写入数据。
实现这种方法的一种方法是对“中间”对象使用多重继承。其中一个父提供有限的公共界面供渲染器使用,另一个提供更全面的界面供模拟器使用。
当然,就像C ++本身提供的保护一样,这基本上只是防止意外,而不是故意颠覆。我假设您对渲染器缺乏信任基本上可以防止可能的错误,而不是可能试图故意破坏安全性的渲染器。如果你需要保护后者,你几乎需要至少使用操作系统级别的机制,例如模拟器和渲染器在不同的进程中,它们之间有某种IPC(但当然,这几乎不可避免地增加了相当多的开销。