2012-02-10 39 views
4

我已經創建了一個ASP.NET MVC 3解決方案。它由三個獨立的項目組成。我要使用Automapper和Unity。每個視圖都有自己的ViewModel。什麼是ASP.NET MVC 3解決方案結構,數據引用和Automapper集成的正確方法?

的項目有:

  • DATA(代碼優先模式和庫類位於該項目)
  • BUSINESS(。服務類位於該項目數據項目被添加作爲參考)
  • WEB(WEB UI的項目。這是MVC項目。創業項目被添加作爲參考。)

現在,我有2個問題。

  1. 這個項目結構是一個很好的做法嗎?
  2. 我想在控制器中使用Automapper與我的服務調用。但是,如果我在控制器中使用Automapper,則必須在我的WEB項目中添加DATA項目作爲參考,以便從POCO轉換爲ViewModels。 WEB項目不應該只與BUSINESS項目交互?

需要幫助。

謝謝。

+1

達林季米特洛夫有一個有趣的示例項目在這裏,是值得回顧:https://開頭github上。 com/darind/samplemvc – Jesse 2012-02-11 05:30:30

回答

1

問題1這是主觀的,這不是問問它的最好的地方。然而,對於它的價值來說,我所維護的項目通常包含核心,Web和服務項目。

問題2不,根據您的示例和我的經驗,您的Web項目引用您的DATA和BUSINESS項目並不錯。對我們來說,我們的Web項目瞭解我們的核心和服務項目。但是,我們的服務項目沒有提及我們的Web項目。出於這個原因,我們的Automapper配置確實知道如何映射到服務模型,視圖模型和實體模型。

這有幫助嗎?如果你喜歡我詳細說明,請在評論中告訴我。一點點的方法on this blog你可能會發現一個圖像,描述了我們使用的類似項目設置。

+0

完美。感謝您的快速答覆。 – SherleyDev 2012-02-10 21:32:54

0

你所描述的是通常的方法,一般來說沒有問題。當然可能有辦法可以被視爲替代方案。但這取決於您的實際要求,並且也受個人喜好。

您的POCO基本上是您的業務對象。即使他們駐留在DATA項目中,他們也是您的域名的一部分。在你的用戶界面項目中直接引用數據通常會更好,直到需要更復雜的解決方案。

+0

謝謝丹尼斯。 – SherleyDev 2012-02-10 21:33:25

0

我知道你已經接受了shanabus的回答,但是我想在討論中增加一些可能對第二個問題有幫助的內容。

MVC確實是一個表現層的建築模式,這會導致不同的方式來組織你的項目: 表示層(Web項目)只能在視圖模型對象來說話,因爲這是真正重要的,以它。因此,您的業務項目(或服務層)應該負責將模型翻譯成ViewModel,反之亦然,例如使用AutoMapper,引用Model和Repository層(本例中爲您的Data項目)。 鑑於表示層不再負責將模型轉換爲ViewModel,反之亦然,您可以刪除對Data項目的引用並解決問題。

您可以通過以下鏈接更好的和更詳細的解釋:http://msdn.microsoft.com/en-us/magazine/hh456393.aspx

希望這有助於

+0

那麼,根據下面提到的帖子,我應該只在控制器中使用viewmodels,而不是在其他地方像服務層。請看看: http://stackoverflow.com/questions/5610887/where-is-best-practice-to-do-mappings-from-view-model-to-domain-model – SherleyDev 2012-02-11 15:57:26

+0

有說: 「你不應該把你的任何映射邏輯放在服務層中,因爲它只屬於那裏,映射邏輯應該放在你的控制器裏,不要放在其他地方。」 爲什麼你可能會問?很簡單,通過將映射邏輯放入你的服務層,它需要知道服務層永遠都不應該知道的ViewModels - 它也降低了將映射邏輯放在那裏的應用程序的靈活性,因爲您無法重用服務層而沒有很多黑客行爲。 「 – SherleyDev 2012-02-11 16:00:16

+0

我明白你的觀點SherleyDev。我不認爲這樣的問題存在正確的答案:我只是想給你一個關於這個問題的不同觀點和看法,特別是我想提供一個解決方案,幫助你擺脫演示文稿中的任何參考到模型。 – s0nica 2012-02-14 15:11:22

相關問題