2009-09-29 44 views
11

我目前正在研究一個ASP.net MVC網站項目。哪裏可以幫助我執行控制器任務?

我已經把所有數據庫相關的東西放在我的模型中,比如查詢和更新/刪除/保存功能。

我還創建了一對執行邏輯的控制器。我添加了一個Helpers命名空間,並且在該命名空間內有幾個包含分頁,國際化等邏輯的類。

我想知道什麼是放置函數和類的最佳做法,它執行一些常規工作,例如生成發票?

+0

如果可以的話,我會給這個問題+100票。我真的很想知道別人怎麼解決這個問題。我剛開始嘗試使用ASP.NET MVC(在一箇中等規模的項目上),我發現自己經常被目錄結構和一些MVC概念所困擾。 – 2009-09-30 14:27:48

回答

4

正如我在上面的評論中表達的,我對這個問題非常感興趣。

首先,在您的ASP.NET MVC項目中直接創建額外的目錄(對於其他類和實用程序)似乎是錯誤的。另外,我不認爲它應該在模型中。對我而言,模型或多或少是以某種方式表示數據庫(或我們試圖建模的數據)的數據類。最重要的是,業務功能(或者應用程序中的「真實」代碼段)一次處理幾個模型類,因此在某些模型類中可能沒有自然的地方。

所以我想我對下面的模式傾斜:

  • 控制器動作極小;每行只有幾行代碼。
  • 保留型號簡單和大多無功能,並把它放到一個單獨的項目
  • 將所有放入您的代碼,將所有「真實」工作(「業務層」)轉換爲單獨的項目

這樣,你會在選擇自己的命名空間得到了完全的自由,你就可以創建任意數量的實用工具類,函數,一般能爲你喜歡不通過ASP的限制來構建你的代碼。 NET MVC。

這只是一個想法。目前我正在處理我的第一個較大的ASP.NET MVC應用程序。所以我實際上會去了解它是否以及如何在實踐中發揮作用。

+0

我想我會把所有的實際工作放在一個單獨的項目中。 – jao 2009-10-02 14:00:54

0

您可能會考慮創建一些您注入控制器的服務。

這是一個幾乎太寬泛的問題。

+0

你究竟是什麼意思?你有鏈接的例子? – jao 2009-09-29 09:55:24

+0

http://en.wikipedia.org/wiki/Business_logic_layer – 2009-09-29 10:30:34

+0

@jao你使用依賴注入嗎?那裏有很多例子。看看s#arp體系結構一個 – dove 2009-09-29 10:59:03

0

這種業務邏輯應該在你的模型中的某個地方。

但是,我發現當只有某些東西不能真正「適合」任何地方 - 並且您可能想要創建一個實用程序類時 - 通常這是使用擴展方法的好地方。

也許你可以在你的數據集中添加擴展方法來幫助你分頁?

0

我真的需要最好練習,考慮看看Domain Driven Design。它不適合所有項目,並且需要良好的面向對象技能,但我認爲它毫無疑問是一種「最佳實踐」......只要您能負擔得起;-)

請注意,您已經違反了DDD因爲你使用Active Record模式(將持久性邏輯放入實體中)。所以,我並不是說你跟隨DDD。但無論如何,它會很有用。

0

我有像你一樣有Crud和Poco的Model類。

除此之外,我有用於鍵入視圖的Viewmodels。

我的ViewModel非常大,並在一些視圖中使用(對於整個應用程序,大約有10-15個視圖模型)。在我的應用程序中,這些ViewModel最終成爲代碼的完美之處,它代表着控制器操作的重要性和重複性。

例如,當我將產品添加到購物車時,我有一些相當接近UI的邏輯。我現在在ViewModel:AddToCart(IProductService productService,ICartService cartService)中有一個方法。

0

我認爲這個關於實踐的問題的最佳解決方案是: 如果要在控制器中使用模型,請將邏輯放入模型中。 如果它是特定於控制器的,只需將其放入控制器即可。 當我說模型時,這可能是一個單獨的項目,它包含了你的實體數據模型,或者它可能是一個視圖模型,或者它可能只是你的MVC項目的模型文件夾。

相關問題