我目前正在研究一個ASP.net MVC網站項目。哪裏可以幫助我執行控制器任務?
我已經把所有數據庫相關的東西放在我的模型中,比如查詢和更新/刪除/保存功能。
我還創建了一對執行邏輯的控制器。我添加了一個Helpers命名空間,並且在該命名空間內有幾個包含分頁,國際化等邏輯的類。
我想知道什麼是放置函數和類的最佳做法,它執行一些常規工作,例如生成發票?
我目前正在研究一個ASP.net MVC網站項目。哪裏可以幫助我執行控制器任務?
我已經把所有數據庫相關的東西放在我的模型中,比如查詢和更新/刪除/保存功能。
我還創建了一對執行邏輯的控制器。我添加了一個Helpers命名空間,並且在該命名空間內有幾個包含分頁,國際化等邏輯的類。
我想知道什麼是放置函數和類的最佳做法,它執行一些常規工作,例如生成發票?
正如我在上面的評論中表達的,我對這個問題非常感興趣。
首先,在您的ASP.NET MVC項目中直接創建額外的目錄(對於其他類和實用程序)似乎是錯誤的。另外,我不認爲它應該在模型中。對我而言,模型或多或少是以某種方式表示數據庫(或我們試圖建模的數據)的數據類。最重要的是,業務功能(或者應用程序中的「真實」代碼段)一次處理幾個模型類,因此在某些模型類中可能沒有自然的地方。
所以我想我對下面的模式傾斜:
這樣,你會在選擇自己的命名空間得到了完全的自由,你就可以創建任意數量的實用工具類,函數,一般能爲你喜歡不通過ASP的限制來構建你的代碼。 NET MVC。
這只是一個想法。目前我正在處理我的第一個較大的ASP.NET MVC應用程序。所以我實際上會去了解它是否以及如何在實踐中發揮作用。
我想我會把所有的實際工作放在一個單獨的項目中。 – jao 2009-10-02 14:00:54
這種業務邏輯應該在你的模型中的某個地方。
但是,我發現當只有某些東西不能真正「適合」任何地方 - 並且您可能想要創建一個實用程序類時 - 通常這是使用擴展方法的好地方。
也許你可以在你的數據集中添加擴展方法來幫助你分頁?
我真的需要最好練習,考慮看看Domain Driven Design。它不適合所有項目,並且需要良好的面向對象技能,但我認爲它毫無疑問是一種「最佳實踐」......只要您能負擔得起;-)
請注意,您已經違反了DDD因爲你使用Active Record模式(將持久性邏輯放入實體中)。所以,我並不是說你有跟隨DDD。但無論如何,它會很有用。
我有像你一樣有Crud和Poco的Model類。
除此之外,我有用於鍵入視圖的Viewmodels。
我的ViewModel非常大,並在一些視圖中使用(對於整個應用程序,大約有10-15個視圖模型)。在我的應用程序中,這些ViewModel最終成爲代碼的完美之處,它代表着控制器操作的重要性和重複性。
例如,當我將產品添加到購物車時,我有一些相當接近UI的邏輯。我現在在ViewModel:AddToCart(IProductService productService,ICartService cartService)中有一個方法。
我認爲這個關於實踐的問題的最佳解決方案是: 如果要在控制器中使用模型,請將邏輯放入模型中。 如果它是特定於控制器的,只需將其放入控制器即可。 當我說模型時,這可能是一個單獨的項目,它包含了你的實體數據模型,或者它可能是一個視圖模型,或者它可能只是你的MVC項目的模型文件夾。
如果可以的話,我會給這個問題+100票。我真的很想知道別人怎麼解決這個問題。我剛開始嘗試使用ASP.NET MVC(在一箇中等規模的項目上),我發現自己經常被目錄結構和一些MVC概念所困擾。 – 2009-09-30 14:27:48