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