2010-01-21 45 views
2

我不直接尋找代碼,但對於一些想法如何最好地解決我的問題。Asp.net MVC - 如何實現跨項目使用的靈活模塊?

這是我正在開發的這個asp.net mvc應用程序。它應該是「高度模塊化」的,許多部分必須在不同的項目中重複使用。

我們當前的方法是使用託管擴展框架在運行時導入程序集。這些通常包括工作所需的一切;模型,視圖和控制器。導入時會註冊路線和導航/主菜單按鈕。 迄今爲止,例如,我可以簡單地將「news-column」程序集複製到任何其他項目中,包括MEF的東西,並且「神奇地」新項目提供可在/ News/List中訪問的新聞功能。

但是,問題是,雖然在大多數情況下在組件中提供了默認視圖,但我有時會希望導入的控制器顯示不同的視圖,並在自定義佈局中顯示其他字段。我目前的做法是使模塊中的操作方法變爲虛擬。如果另一個項目需要使用自定義視圖呈現列表,我只需重寫list方法,調用基本方法來填充ViewData,然後調用任何我想要的視圖。然而,這不知何故感覺骯髒,如果有人知道更好的解決方案,我會非常感激。

我面對的另一個問題是我可能想要一個導入的模型與不同的表一起工作。我們將使用Fluent NHibernate,在ClassMap - Table(「News」)中定義目標表。 映射是進口這樣的:

foreach(Assembly assembly in assemblies) 
    configuration.Mappings(m => m.FluentMappings.AddFromAssembly(assembly)); 

我無法弄清楚如何改變導入的映射表,但我想有一個簡單的方法是什麼?

感謝至少閱讀本:)

+0

小挑逗:MEF代表託管擴展框架,而不是Microsoft Extensibility Framework – 2010-01-22 01:44:35

+0

絕對正確,對不起,我一直都在犯這個錯誤 – Steffen 2010-01-22 10:24:23

回答

0

我不認爲重寫你的控制器動作應該感到「髒」。事實上,我在一個公共庫中使用基本控制器操作來處理可以像用戶身份驗證一樣輕鬆抽象的事物。另一方面,身份驗證通常對於用戶界面非常具體,因此我不打算創建可重用的視圖。

我也創造了我的應用程序中的基本控制器類來處理創建/配置我的EF上下文等

你可能要考慮你的抽象的數據訪問。即使你使用的是NHibernate,而你的標準實現使用了某個數據庫模式,但你正在遇到一個非常經典的代碼重用問題:在可重用的包中放入了太多特定的邏輯。作爲一般規則,我嘗試從我的可重用代碼中保留任何數據庫細節。我使用POCO對象和接口,因此我可以使用任何類型的數據源來創建我的對象。然後,我可能會有另一個使用SQL服務器,EF,我的首選數據庫模式等標準實現的程序集。但是,如果需要將其連接到其他某個元素,我會在新版本中簡單實現接口。

希望能回答你的問題。