2014-01-25 82 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