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