2012-07-06 98 views
0

我正在編寫我的第一個MVC應用程序,儘管我一直在嘗試應用其他答案中給出的指導原則,但項目結構使這變得困難(而且我正在搞一堆東西!)。 目前,應用程序被分成以下層:具有Web API業務層的ASP.Net MVC 3體系結構

  • 域對象/邏輯使用Web服務的API訪問。我將此圖層視爲黑盒,因爲某些代碼在幾個WPF應用程序中使用,並且不在我的控制之下。

  • 存儲庫層。該層調用Web API服務,並添加到幫助單元測試。它調用服務並返回一個反序列化的域模型。

  • 控制器。根據數據的使用方式,我有兩種不同的控制器。

    在第一種類型中,控制器調用存儲庫中的方法,然後使用映射器類將域對象轉換爲視圖模型。映射是手動完成的,因爲一些視圖模型與底層域對象顯着不同。例如:

    DomainObject domainObject = m_repository.GetObject(id); 
    ViewModel model = ModelMapper.PopulateViewModel(domainObject); 
    return View(model); 
    

    第二種類型旨在提供AJAX調用所使用的數據。在這裏,控制器像以前一樣調用存儲庫,但隨後使用定製的Json.Net轉換器將域模型轉換爲JSON。 E.g:

    var jsonNetResult = new JsonNetResult(); 
    DataObject data = m_repository.GetData(id); 
    
    jsonNetResult.Converters.Add(new DataObjectConverter()); 
    jsonNetResult.Data = data; 
    
    return jsonNetResult; 
    

問題:

這感覺就像我做了很多的JSON,域對象和視圖模型之間的切換。這似乎沒有特別的表現 - 可以/應該存儲庫創建視圖模型而不是控制器?

如果數據旨在作爲JSON提供,我將域對象轉換爲JSON,而不是使用視圖模型。這看起來不一致,但我不想爲了它而映射到視圖模型。這是正確的方法嗎?

我可以在實體框架的頂部找到很多使用MVC的示例,但我很努力地找到在MVC應用程序中使用Web API的示例。任何人都可以將我指向正確的方向嗎?

希望這是有道理的,謝謝!

回答

2

我會爲您的應用程序建議一個更簡單的模型:將Web API和經典的MVC控制器視爲存儲庫層反映持久存儲的倉庫信息的兩種方式。你不想讓MVC控制器調用Web API - 直接進入存儲庫。

有很多關於如何在MVC應用程序中使用Web API的例子,例如你可以看看[1]。

的Henrik

[1] http://www.asp.net/web-api/samples

+0

我有看那些示例,並且可以看到它們是如何使用Web API和控制器層。但是,Web API層提供了視圖所需的內容(與控制器的方式相同),而在編寫Web API層的項目中,提供了訪問不能密切反映視圖結構的業務模型。 我在控制器和Web API之間有一個存儲庫層的原因更多的是幫助我測試,而不是其他任何東西 - 可能這是命名錯誤。 – Nemone 2012-07-10 07:03:48