3

我想尝试编写(这里是业余爱好者!)多人游戏,现在在设计时我决定使用 MVC 模式。
现在我的问题是:我应该把我的网络代码放在哪里?在模型或控制器中?(显然不是视图)

编辑: 对不起,数百次我的问题都不清楚。
游戏本身将是 MVC,它首先与服务器通信(查找玩家),然后与该玩家通信(轮到你并轮到其他人)。那么我应该在哪里做呢?

4

2 回答 2

2

MVC 设计模式实际上是两层的组合:表示层和模型层。表示层通常处理用户界面(更新它并对用户的交互作出反应)。模型层处理领域业务逻辑和持久性。

网络代码应该放在模型层。

确切地说,在模型层处理持久性的部分,因为从业务逻辑的角度来看,数据的来源没有区别。它可以来自 SQL 数据库,来自打开的网络套接字或火星探测器上的探测器。这些都只是数据源,通常作为数据映射器实现,是模型层的一部分。

于 2012-08-25T08:41:52.233 回答
1

您可以将实际游戏本身放在一个新项目中,并在您的 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
}

然后你可以做同样的事情来获取特定的玩家回合信息,然后更新你的模型以传递给包含新信息的视图。

于 2012-08-25T08:37:22.933 回答