我目前正在尝试找到一个“确定的”解决方案(意思是:找到一个看起来有效的解决方案,并符合 OOP 规则)解决我一段时间以来反复出现的问题:我的不同部分的共享数据问题代码。
请注意,我在这里的任何地方都没有使用任何 MVC 框架。我只是将我的数据类称为模型,将显示类称为视图(因为它的专有名称与 MVC 模式无关,人们在 MVC 模式“创建”之前就制作了视图和模型)。
这是我的问题:每当我制作一个使用一些相当扩展数据的应用程序(例如游戏)时,我都会尝试分离逻辑(运动、碰撞等)并在两个类中显示。但是后来,我偶然发现了一个问题:如何将存储在我的逻辑类中的数据与我的视图类中的相应显示对象“绑定”,而不在不同类之间复制数据、引用或其他东西?
让我们举一个基本的例子:
我有一个 MyLogicClass,持有一个“EntityData”对象的向量(每个对象都有位置、大小、各种状态、处理我的项目逻辑的所有内容)
我有一个 MyViewClass,为 MyLogicClass 中的每个 EntityData 创建和显示 Sprite,并在游戏循环中更新它们后使它们移动。
我首先想到的是在每个数据元素中存储其对应的视图,从而允许我循环遍历我的 Vector 以更新项目逻辑,然后相应地更新视图。但这迫使我在 MyViewClass 中保存一个 MyLogicClass 引用,以确保我可以定位实体数据,迫使我将这两个类结合起来(我不想做的事情)。
另一方面,在我的数据模型(MyLogicClass 的 EntityData 对象具有 ID 参数)和我的 View 类(Sprites 持有对其原始实体数据 ID 的引用)中,每个实体都有一个 ID 的解决方案。但是,当我想针对一个特定实体强制我在我的数据模型中循环它时,然后再次循环它以在我的视图中找到相关的 Sprite。这个解决方案允许我在我的数据和我的视图之间有松散的耦合,但是每帧循环通过数百个元素两次(可能发生!)对于我来说确实听起来没有优化性能。
我可能对整个问题给予了应有的重视,但我已经不止一次偶然发现了这一点,而且我很想对此有一些其他的看法。
你们对这样的问题有什么建议/解决方案吗?
对于这种情况,是否还有其他一些我可能不知道的数据格式/层次结构?