2012-07-18 55 views
7

我沒有MVC應用程序,「M」包括服務和存儲庫層。Controller - > Service - > Repository:服務是否將實體映射到ViewModel?

但是,我對於在哪裏以及如何做一些事情有點困惑。

  1. 一個服務調用兩個庫,或調用它自己的存儲庫和其他服務

例如

我有一個ReferenceDataService,它使用我的引用表處理CRUD的所有邏輯。

然後在我的「CustomerService」中,我需要'R'我的參考數據來獲取描述而不是Id。那麼,我可以調用ReferenceDataService還是ReferenceDataRepository?

  1. 在某一層,我想從Entity映射到ViewModel。

我可以在服務層或Controller中執行此操作嗎?

例如我的ServiceLayer是否執行從VM到實體的映射/邏輯並返回?

謝謝:)

回答

22
  • 庫交談的基礎數據源。
  • 服務層通過域模型與存儲庫進行對話。它需要/將域模型傳遞給/存儲庫層。
  • 控制器與服務層對話。控制器將域模型從/發送到服務層。
  • 控制器調用映射層(如果有的話)在域模型和視圖模型之間映射。如果你沒有映射層,你可以在你的控制器中進行映射,儘管這可能很快變得很麻煩,在這種情況下,AutoMapper可以作爲一個非常方便的映射層。

另一個更簡單的情況是,當您不需要小型應用程序中經常出現的服務層時。服務層沒有任何好處。所以控制器直接與域模型對話。

+0

+1 - 真棒答案一如既往....! – bhuvin 2012-07-18 10:57:31

+0

Thx :)我想我可能會刪除我的服務層......它在我的應用程序中服務的目的很小,我只是因爲它「適合模式」而將它包含在內。衛生署! – BlueChippy 2012-07-18 11:49:02

5

ViewModel包含顯示模型的視圖所需的數據。如果您將使用其他視圖(例如,移動應用程序,桌面應用程序甚至Web服務),則需要在視圖中顯示其他數據。如果您要在服務層上進行映射,那麼您將無法將其用於其他類型的應用程序。因此,控制器是您映射域數據以在視圖上顯示它們(無論您擁有哪種類型的視圖)的地方。

相關問題