【问题标题】:Another post on MVC responsibility, who should know what?另一个关于 MVC 责任的帖子,谁应该知道什么?
【发布时间】:2012-03-24 02:27:12
【问题描述】:

思考纸牌游戏...

计算机用卡片攻击人类。作为回应,玩家移动视图上的卡片以击败它。

在这种情况下,请确认:

(1) 无需询问控制器,View 就可以知道屏幕上的“着陆区域”在哪里

(2) View 可以知道屏幕上的“防御者”卡片在哪里而不需要询问它的控制器

如果视图知道攻击者和防御者是谁,(3)视图是否可以确定攻击者是否可以击败防御者?

如果这不合适,(4) 是否可以将 View 分类为其他信息的控制器(想想 Utils 类),还是应该始终作为控制器? p>

(5) 向控制器发送一个委托方法指示“攻击者卡落在防御者卡上”并期望布尔值攻击是否成功会更好吗?

【问题讨论】:

    标签: ios model-view-controller


    【解决方案1】:

    视图是一种被动输入/输出设备。它不应该对游戏规则一无所知,例如攻击者是否可以击败防御者。甚至控制器也不应该知道游戏规则,模型总是决定这一点。

    视图应该能够表示和处理所有可能的输入和输出状态,并将输入中继到控制器。控制器将输入信息传递给模型并根据新的模型状态更新视图。在您的情况下,视图检测到卡 A 落在卡 B 上并将信息传递给控制器​​。控制器将信息传递给模型,模型转换到新的游戏状态,控制器会将视图更新到新状态。有时视图可以通过直接观察模型来自动更新,这取决于情况。

    考虑 MVC 分离规则的一个好方法是想象将游戏移植到不同的界面 (GUI/CLI) 或不同的皮肤。如果你发现你必须重做大部分代码来支持不同的界面,除了特定于界面的东西之外,你还必须接触一些东西,这意味着设计不是最优的。

    另一个很好的设计直觉来源是测试和模拟。如果要运行一些自动测试或游戏模拟,您必须将游戏代码与模型内部的输入和输出分开。当逻辑散布在整个 MVC 上时,测试和模拟游戏会很痛苦,并且会提醒您有问题。

    【讨论】:

      猜你喜欢
      • 2011-04-13
      • 1970-01-01
      • 1970-01-01
      • 2011-07-24
      • 2011-12-28
      • 1970-01-01
      • 2011-03-10
      • 2011-01-22
      • 1970-01-01
      相关资源
      最近更新 更多