2008-11-22 54 views
4

我有一個大的.NET Web應用程序。系統有不同意圖的項目(例如CMS,論壇,電子商務),並且我注意到調用另一個項目類的(天真)模式。例如,電子商務模塊需要功能來爲產品動態生成文件,並且我在CMS中調用並引用一種方法來執行此操作,因爲文件處理對於CMS來說確實是一項工作。簡單的提示,以減少耦合

顯然,(我知道爲什麼),這是不好的設計和高耦合的情況。

我知道一些方法來處理高耦合,如重組項目(雖然我真的不認爲這是一個強大的解決方案),但還有什麼我可以做,以減少高耦合?任何簡單的提示?另外,最好知道他們爲什麼/如何減少耦合。我使用.NET 3.5和Sql Server 2005,所以像JMS(我在搜索關於此設計問題的技巧時不斷遇到)都不適用。

感謝


BTW,

一個我問這是我看過與此類似,但通常如果已經問過一個問題被再次問前面的問題的原因,不同的人可以在不同的人回覆帖子時學到不同的提示。

我知道依賴注入/ IOC的,但我感興趣的是小事情可以做,以減少耦合。

如何選擇使用靜態類還是界面派生類,或IOC方法在決定如何減少耦合時使用?另外,我可以開發一個可以調用靜態類的Web服務 - 在我的解決方案中混合使用這些方法。

有趣的是,在我的應用程序,我不希望它被脫節。所以我只需要一個論壇,電子商務系統和任何其他模塊,但是每個模塊都必須凝聚成一個站點,因此每個模塊(在我的Visual Studio解決方案中表示爲一個專用項目)都需要了解每個其他模塊並工作用它。因此,例如,我可能有一個處理用戶配置文件的模塊(使用ASP.NET成員資格,角色等),但是這將與論壇模塊一起工作,因爲論壇上的用戶將是該網站上的註冊用戶(一個全程登錄),他或她的個人資料將來自用戶個人資料模塊。這與我在其他網站上看到的獨立配置文件相反)。

回答

3

這聽起來像你有一個分層問題。你的程序集應該有一個依賴週期 - 從最不穩定到最穩定。這可以讓你明智的版本。一般來說,這個循環會像UI(最不穩定) - >域核心(穩定) - >數據訪問(最穩定)。你可以一路上扔進一個Utilities或者一些基礎設施組件,但是又應該被認爲比依賴它們的組件更穩定。

我猜你的App.ECommerce和App.Cms程序集比層更多的兄弟姐妹 - 所以你不希望那些依賴對方,但這並不意味着你不能重用功能。對於您的特定場景,您需要將所需功能推送到電子商務和Cms可以依賴的Core或Utilities程序集。如果它是ECommerce提供的特定實現,那麼您可以將接口或抽象基類推送到Core - 並且具有更高層(可能是IoC容器)將具體的Cms.FileCreator類連接到ECommerce.IFileCreator依賴項。

4

您應該在那些其他項目需要的項目中公開Web服務。這是SOA背後的基本層次思想。所以,我只會創建Web服務並使用它們,這會使您與現在的方式脫鉤。希望這可以幫助。

1

好了,我不知道什麼.NET,但如何重構公共代碼到一個單獨的,墊層工程/層?在網絡應用程序中加載的東西通常可以完成以適應CMS,論壇和電子商務,寫入文件就是一個很好的例子。

另一種方法可能是看到論壇和電子商務作爲一個CMS模塊,這也將是有意義的。然後他們可以安全地使用CMS的指定API。

4

我會考慮通過對緊密耦合的塊進行「提取接口」重構來開始。例如,如果使用CMS作爲後備存儲,創建一個可以存儲事物的接口,然後創建一個瞭解CMS的中介或適配器類,但將知道存儲機制詳細信息的邏輯隔離爲該類。

然後,對於測試,您可以輕鬆替換不依賴於CMS的內存存儲或本地文件系統存儲。

考慮使用像依賴注入(參見StructureMap,Spring.Net,NInject)這樣的技術來簡化實例化,如果一個簡單的工廠沒有爲您提供所需的靈活性。