在对这个主题进行了很多徒劳的搜索之后,我需要在这里提出这个问题。
我打算开创一款在线多人纸牌游戏。最初,游戏只能通过Android手机(作为客户端)播放。但后来,我还想让iPhone用户可以访问它,并使其基于Web浏览器。
所有这三种类型的客户端(Android,iPhone和Web浏览器)应该能够连接到同一台服务器(实现游戏引擎),因此使用相同的逻辑和游戏规则 - 它们的客户端外观是什么会有所不同。
我已在ASP.NET中编程,这就是我计划在此处用作服务器端基础结构的内容。具体来说,我查看了ASP.NET Web API,它看起来很棒:我的三种类型的客户端简单地需要从Web API获取游戏数据作为json并呈现它。
这是我的问题: 我很清楚iPhone和Android将如何获取和使用来自Web API的json格式的游戏数据。但我不清楚网站版本(我认为是ASP.NET MVC)将如何使用Web API?简单地从MVC向Web API发出http请求是明智的 - 如果是的话,它会不会让它变慢?
基本上,我想编写一次游戏逻辑,通过Web APi将其暴露给使用它的许多不同类型的客户端。我想到的这种架构在图#3 here中精美地描绘出来 - 无法在此处发布图像。
图中的其他,代表我的iPhone和Android用户。
也欢迎其他方向的指示。 :) 谢谢
答案 0 :(得分:3)
您的API控制器应该非常薄,您可以通过更远的方式提取业务逻辑来实现,例如:
public class GameController : ApiController
{
GameLogic _gameLogic; // inject through constructor
public PlayCardResult PlayCard(Card card)
{
return _gameLogic.PlayCard(card);
}
}
然后从你的MVC前端,你可以基本上复制控制器,在GameLogic上执行相同的方法:
public class GameController : Controller
{
GameLogic _gameLogic;
[HttpPost]
public ActionResult PlayCard(Card card)
{
var model = _gameLogic.PlayCard(card);
return View(model);
}
}
或者,您可以让MVC控制器调用Web API,例如使用RestSharp:
public class GameController : Controller
{
WebAPIClient _webAPIClient;
[HttpPost]
public void PlayCard(Card card)
{
var model = _webAPIClient.PlayCard(card);
return View(model);
}
}
或者你可以让MVC变得愚蠢,让浏览器与WebAPI进行通信,例如using jQuery。