2014-01-25 128 views
3

经过对此主题的大量搜索之后,我需要在此处提问。从ASP.NET MVC和移动设备中使用ASP.NET Web API

我打算创建一个在线多人纸牌游戏。最初,游戏只能通过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用户。

任何在其他方向的指针也是受欢迎的。 :) 谢谢

回答

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); 
    } 
} 

或者,您可以使用RestSharp让MVC控制器调用Web API,例如:

public class GameController : Controller 
{ 
    WebAPIClient _webAPIClient; 

    [HttpPost] 
    public void PlayCard(Card card) 
    { 
     var model = _webAPIClient.PlayCard(card); 
     return View(model);   
    } 
} 

或者你可以让MVC很笨,让浏览器与WebAPI通信,例如using jQuery

+0

谢谢你的快速回答。关于使用类似GameLogic的东西是很好的一点。所以我的GameLogic将被MVC和Web API用作客户端,我只需要在一个地方维护GameLogic? – user2711444

+0

@用户是的,那是我的意图。我不知道你现在是怎么做到的,但我会建议这种可重用性的道路,如上所示。 – CodeCaster

+0

这当然是我想要的 - 重复使用相同的逻辑。最后一个问题。 Web API可以自己托管(公开)吗 - 没有任何附属网站 - 因为该网站无论如何都不会使用它?所以智能手机可以访问它?你已经清理了一些东西给我,所以你的答案被接受,并感谢你的帮助。 – user2711444