在MVC中View允许查看但不能与模型对话吗?

问题描述 投票:0回答:1

我一直在阅读 MVC 并尝试尽我所能地遵循它,但一件事不断出现。

视图可以看到模型对象吗?

我当前的游戏结构如下。

对象(模型)<->场景(控制器)<->精灵(视图)

目前,我执行以下操作。

场景创建一个MapObject(模型)。然后,场景创建一个 MapSpriteNode(视图),但使用 MapObject 对其进行初始化。 MapSpriteNode 需要绘制并使用该信息来布局其视图和子视图。现在,MapSpriteNode 可以保留对该 MapObject 的引用,但不允许以任何方式更改 MapObject。这样,当在 MapSpriteNode 上调用 update 时,它可以看到 MapObject 上的脏图块索引等内容,并且可以更新其相应的 TileNode。

所以现在发生了这种情况

Sprite 被触摸并通知控制器 --> 控制器向模型报告交互 --> 模型相应更新并标记脏索引

发生更新循环

场景调用更新 -> MapObject(随着时间的推移需要发生的任何其他更新) 场景调用update -> MapSpriteNode(查看是否有脏索引和更新) 场景调用 cleanup dirty 到 -> MapObject(脏索引被删除,因为渲染完成)

这还是遵循MVC吗?

architecture design-patterns model-view-controller
1个回答
4
投票

“视图可以看到模型对象吗?”

是的,只要您不通过视图更改任何内容,视图就可以看到模型“内部”。

“这还是遵循 MVC 吗?”

当然。

在MVC架构中,模型应该独立于控制器和视图,并且在“被动”实现的情况下(您的情况),视图应该在控制器通知后轮询模型以获取数据,而不是由控制器通知模型这样做(您可以假设在这种“被动”情况下模型甚至不知道控制器和视图存在)。

View 应该在收到 Controller 通知时从 Model 轮询数据,这在 Scene 调用更新 MapSpriteNode 时发生,并且 View 还应该通知 Controller 有关事件,例如 Sprite 被触摸后通知 Controller。

就Controller而言,它应该像Scene调用MapSpriteNode更新一样通知View更新,并且应该通知Model更新。

© www.soinside.com 2019 - 2024. All rights reserved.