在Robotlegs中,域逻辑需要在命令(控制器)还是模型中?
例如:假设我正在构建一个"Tic Tac Toe“游戏。我有: GameMadiatore,CellSelectedCommand,BoardModel。
在用户单击某个单元格之后,"GameMadiatore“将触发一个事件,该事件将启动"CellSelectedCommand”。"find 3 in row“win逻辑是否需要在"BoardModel”或"CellSelectedCommand“或其他命令中?
发布于 2012-09-27 23:50:59
我建议你创建原子命令。
这意味着一个命令应该只做一件事和一件事。这使您可以轻松地重新连接您的应用程序逻辑,而不必在以后进行过多的重构。
在上面描述的情况下,您的想法是正确的,另一个命令就可以了。例如:
关于MVCS的更多原则:
干杯
发布于 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中,让该命令调用游戏类上的适当方法,侦听本地游戏事件,然后通过中央调度程序分派应用程序范围内的事件。然后,您可以使用它们来触发单独的GameWonCommand和GameLostCommand类,以将分数添加到分数中并将其保留在ScoreModel中。模型应该只包含共享状态,即多个任务所需的数据。我喜欢把模型想象成大架子上的抽屉和盒子:你拿出一些执行任务所需的数据(例如,在开始游戏之前的一些用户信息),处理它(玩),然后把它存储起来(保存分数)。
总而言之,这里有一条经验法则:总是试图让你的核心应用程序逻辑与框架和交付机制无关-如果你愿意的话,它们应该是扩展、插件,而不是系统的中心。
https://stackoverflow.com/questions/12622323
复制相似问题