2012-02-10 20 views
9

我想知道如何才能構建一個Web應用程序使用一個文件夾每個功能(客戶,訂單),而不是每個工件類型(控制器,視圖)一個文件夾;這似乎是一個更好的方法來組織具有很多功能的大型項目,但我找不到任何有關它的信息。如何使用per-feature organization而不是per-artifact來構建ASP.NET MVC應用程序?

我不認爲使用區域將是一個解決方案,因爲使用一個區域每個功能需要創建大量的嵌套文件夾。

我認爲我想要做的事應該可以通過自定義IViewEngine實現,但我不確定。

有沒有人試圖做到這一點?

回答

2

如果您願意,可以更改存儲視圖的位置。一個例子,http://weblogs.asp.net/imranbaloch/archive/2011/06/27/view-engine-with-dynamic-view-location.asp

由於約定優於配置的原則,ASP.NET MVC很容易開發。如果你真的想改變這些慣例,你可以;但是,你會發現自己做了更多的編碼。例如,腳手架不適用於您的配置。

爲什麼不只是在工件文件夾內創建邏輯分隔符?因此,您的Models文件夾內有一個ViewModels文件夾和一個DataModels文件夾。在DataModels文件夾中,爲模型的不同子集(Customers,Orders等)創建文件夾。只是我2美分。

+0

這或多或少是我不喜歡原創公司的原因nvention:http://www.paulstovell.com/horizo​​ntal-vertical-project-structure - 我已經在其他項目中使用這種結構,它很適合我。 我知道這可以通過定製IViewEngine和IControllerFactory的實現來完成,在這裏我正在尋找一些關於這種約定變化的實踐經驗,以及它爲什麼或者它不值得。 注意:我不會使用腳手架 – gschuager 2012-02-11 12:53:40

+0

我同意。按角色分組,例如一旦項目超越了幾個控制器,控制器/模型/視圖真的開始咬你。基於特徵的組織在組織生產項目方面非常先進。強烈推薦與任何項目。 – demisx 2015-05-17 16:30:27

2

您可以創建根特徵文件夾,爲其中的每個功能和共享文件夾創建一個文件夾。然後,您可以將與單個功能相關的所有文件(控制器,型號,視圖,腳本)添加到其文件夾。如果多個功能使用相同的文件,您可以將它共享到共享文件夾這是項目結構可能看起來怎麼樣:

​​

爲了使用剃刀與您需要創建從RazorViewEngine繼承新視圖引擎類此文件夾結構,設置適當的ViewLocationFormatsMasterLocationFormatsPartialViewLocationFormats並添加視圖的實例發動機到ViewEngines.Engines集合。對於樣例實現以及Tim G. Thomas的使用檢查FEATURE FOLDERS IN ASP.NET MVC article

如果要在視圖中使用類似Scripts的類,還需要導入其名稱空間。一種方法是將Web.config文件從舊的Views文件夾複製到Features文件夾。對於另一個選項檢查How do I import a namespace in Razor View Page?的問題。

欲瞭解更多信息,檢查下面的文章:

相關問題