首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RobotLegs域逻辑-放置位置

RobotLegs域逻辑-放置位置
EN

Stack Overflow用户
提问于 2012-09-27 21:18:12
回答 2查看 189关注 0票数 2

Robotlegs中,域逻辑需要在命令(控制器)还是模型中?

例如:假设我正在构建一个"Tic Tac Toe“游戏。我有: GameMadiatore,CellSelectedCommand,BoardModel。

在用户单击某个单元格之后,"GameMadiatore“将触发一个事件,该事件将启动"CellSelectedCommand”。"find 3 in row“win逻辑是否需要在"BoardModel”或"CellSelectedCommand“或其他命令中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-27 23:50:59

我建议你创建原子命令。

这意味着一个命令应该只做一件事和一件事。这使您可以轻松地重新连接您的应用程序逻辑,而不必在以后进行过多的重构。

在上面描述的情况下,您的想法是正确的,另一个命令就可以了。例如:

  • CellSelectedCommand
  • Check3InRowCommand
  • StartNewGameCommand
  • PlayerWinsCommand
  • ..

关于MVCS的更多原则:

  • 中介人:应该被视为邮递员。它将充当视图和应用程序之间的中间人。如果你愿意,可以称它为ViewController,但是可以考虑将更多的rudimentary.
  • Command:作为控制器逻辑,所有的决策都可以在这里完成。从这里更新您的模型。
  • 模型:应该只反映应用程序状态。例如,指示游戏是否已获胜的布尔值。

干杯

票数 1
EN

Stack Overflow用户

发布于 2012-09-28 07:26:28

正如@DennisJaamann所说--一个命令应该只做一件事。然而,它不应该包含实际的域逻辑。它既不应该在Model中,也不应该在View类中。

原因如下:如果你把你的游戏逻辑放在框架特定的类中,你将永远把你的游戏绑定到这个特定的框架(即使它确实是个好框架)。然而,TicTacToe的游戏规则应该始终保持不变,无论它们是与RobotLegs、PureMVC一起使用,还是您选择的任何其他技术。例如,如果在几个月内,您决定为一些花哨的新移动设备创建游戏版本,并且您希望使用特定于供应商的MVC框架和组件,否则您将不得不从头开始做所有事情。此外,将游戏逻辑分散在几个命令类中会使跟踪、阅读和理解代码变得更加困难-这使得调试变得非常痛苦。

As Uncle Bob Martin would put it:框架是一种交付机制。不多也不少。它应该用于传递信息,即将其呈现给用户,并处理用户交互事件。但实际的领域逻辑应该在框架无关的用例类中,这些用例类具有反向依赖关系,因此与交付机制完全解耦。

因此,我将创建一个游戏界面,可能只将其命名为ITicTacToe,并在游戏类TicTacToe中实现它,该类包含状态(即,哪些单元已经被标记)和逻辑(即,检查是否连续有三个)来执行和监视单轮TicTacToe。这些东西应该放在一起,因为它们用于相同的目的,并且它们具有相同的single reason to change:当且仅当TicTacToe的规则改变时!

使用TDD实现游戏的行为,并让游戏类在游戏输赢时调度事件,而不是跟踪分数等-这些是围绕游戏的应用程序逻辑的一部分,而不是游戏本身。

然后,您可以将游戏注入到CellSelectedCommand中,让该命令调用游戏类上的适当方法,侦听本地游戏事件,然后通过中央调度程序分派应用程序范围内的事件。然后,您可以使用它们来触发单独的GameWonCommandGameLostCommand类,以将分数添加到分数中并将其保留在ScoreModel中。模型应该只包含共享状态,即多个任务所需的数据。我喜欢把模型想象成大架子上的抽屉和盒子:你拿出一些执行任务所需的数据(例如,在开始游戏之前的一些用户信息),处理它(玩),然后把它存储起来(保存分数)。

总而言之,这里有一条经验法则:总是试图让你的核心应用程序逻辑与框架和交付机制无关-如果你愿意的话,它们应该是扩展、插件,而不是系统的中心。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12622323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档