【发布时间】:2012-08-20 16:03:11
【问题描述】:
我想尝试编写(这里是业余爱好者!)多人游戏,现在在设计时我决定使用 MVC 模式。
现在我的问题是:我应该把我的网络代码放在哪里?在模型或控制器中? (显然不是视图)
编辑:
抱歉,我的问题已经有数百次不清楚了。
游戏本身将是 MVC,它首先与服务器通信(查找玩家),然后与该玩家通信(轮到你并轮到其他人)。那我应该在哪里做呢?
【问题讨论】:
标签: model-view-controller networking
我想尝试编写(这里是业余爱好者!)多人游戏,现在在设计时我决定使用 MVC 模式。
现在我的问题是:我应该把我的网络代码放在哪里?在模型或控制器中? (显然不是视图)
编辑:
抱歉,我的问题已经有数百次不清楚了。
游戏本身将是 MVC,它首先与服务器通信(查找玩家),然后与该玩家通信(轮到你并轮到其他人)。那我应该在哪里做呢?
【问题讨论】:
标签: model-view-controller networking
您可以将实际游戏本身放在一个新项目中,并在您的 MVC 应用程序之间引用它,这样您的游戏就与您的 Web 应用程序完全分离。例如,如果您想将其移植到 WPF,这可能会很有用。另一种选择是将游戏作为 Web 服务,MVC 应用程序从中请求信息,并为其他语言提供可扩展性以插入。
但是,如果您决定将所有内容作为一个整体保留在 MVC 中,那么我建议您使用模型。
作为细分:
控制器负责处理所有 Web 请求,即 GET 和 POST。它还可以填充模型并为该请求返回适当的视图。
模型包含要执行的域对象和逻辑(即从存储库中提取信息并处理要传递给视图的数据)。
视图返回基于模型中存储的数据的标记。
在某些实现中,检查条件和存储库调用等附加逻辑也发生在控制器级别,这是一种称为胖控制器瘦模型的技术。
编辑:
您应该向控制器发送请求。 IE。在您的游戏控制器中有一个HTTPPost 方法,该方法连接到服务器,然后向玩家发送回合信息并获取新信息。例如:
[HttpPost]
public ActionResult SendPlayerTurnInformation(PlayerObject player)
{
// logic to connect to the Game Network
// connection.UpdatePlayerTurn(player);
//return success/fail
}
然后您可以执行相同操作来获取特定玩家回合信息,然后更新您的模型以传递到包含新信息的视图。
【讨论】:
MVC 设计模式实际上是两层的组合:表示层和模型层。表示层通常处理用户界面(更新它并对用户的交互作出反应)。模型层处理领域业务逻辑和持久性。
网络代码应该放在模型层。
确切地说,在模型层处理持久性的部分,因为从业务逻辑的角度来看,数据的来源没有区别。它可以来自 SQL 数据库,来自打开的网络套接字或火星探测器上的探测器。这些都只是数据源,通常以data mappers 的形式实现,是模型层的一部分。
【讨论】: