2010-04-20 23 views
5

我總是遇到一個問題,我的Visual Studio(2008)中的項目變成了巨大的怪物,一切都通常被引入到Web應用程序項目中。我知道,從檢查一些開源的東西,他們往往有一個解決方案中的多個項目,每個都有自己的責任。如何在Visual Studio中重構大型項目

有沒有人有任何建議如何重構呢?什麼應該在一個單獨的項目與Web項目的一部分?你能指出一些關於這個問題的參考資料嗎,還是僅僅是你隨着時間而習慣的東西?

+3

那麼首先你需要Resharper ... – cletus 2010-04-20 00:24:20

回答

4

將您的項目整潔地組織到名稱空間中。命名空間不應該太大,不能太小。使每個名稱空間具有公共「接口」(即一組公共類),並且不從其他名稱空間訪問名稱空間的內部實現細節。不同的命名空間通常涉及應用程序的不同部分,例如您將擁有與UI相關的命名空間,業務邏輯,幫助器功能等。Framework Design Guidelines對如何設計命名空間有一些很好的建議。

當您覺得您的項目變得太大時,只需確定明確相互關聯的一組命名空間並將它們移動到單獨的項目中。由於其他名稱空間已經只使用移動的名稱空間的公共接口,所以將名稱空間重構爲新的項目只是一個文件移動操作。

+0

這很有道理。你是否試圖將項目中的類文件與特定的Web項目文件分開?或者你讓他們混合(同時命名空間)。是否有任何命名空間的最佳做法?對不起,我知道這是非常基本的,但我已經這麼做了幾年了,我終於到了沮喪的時刻。 – Aaron 2010-04-20 00:39:37

+0

FDG書是指導。一旦你確定了有意義的命名空間,嘗試對它們進行平衡並將巨大的項目分割成幾個較小的項目。我同意ReSharper很好,但NDepend更有用。 http://codebetter.com/blogs/patricksmacchia/archive/2008/09/23/getting-rid-of-spaghetti-code-in-the-real-world.aspx – 2010-04-20 05:56:51

2

從底層開始(最簡單的類不依賴於框架以外的任何其他類),並查看是否可以將依賴關係分離爲功能單元。例如,如果你有一堆相互引用的數據或業務邏輯類,但是從不引用任何UI類,那麼你就有了一個可以分解到另一個項目的候選者。如果你找不到清晰的分隔點,那麼你有一個設計問題,應該可能做一些重構。

我也同意使用名稱空間是一個很好的開始。即使在一個項目中,您也可以通過自然地將類組合在一起的方式來隔離或最小化依賴關係。將它們放在同一個文件夾中可以強化這個分組作爲一個功能單元,並且可能真的幫助那些將來需要維護代碼的可憐人。相信我,我試着想想那個可憐的傢伙,因爲不止一次,那個可憐的傢伙一直是我。編寫代碼的人在寫他的時候和我有相同的名字,這讓我感到一種小小的安慰。

1

查看guidance given by the Sharp Architecture project。它的ASP.Net MVC,但相同的原則適用於ASP.NET和其他項目。把這些東西放在一起的傢伙們都是聰明我一般會將他們的建議作爲默認使用,只有當我有充分的理由時纔會流浪。

,他們提出的基本分層是

  • 一個核心項目爲您的域對象和接口訪問外部服務(包括持久性)。
  • 一個數據項目,取決於核心,實現了所有的接口訪問持久
  • 應用服務項目支持應用程序級的問題,如記錄或登錄驗證。這只是引用核心。
  • A web僅保存視圖的項目。
  • A 控制器項目保存您的引導代碼和協調您的web圖層,域的代碼。

在一個asp.net程序,我喜歡用MVP模式的情況下,這將基本上意味着

  • 網絡項目握着你的WebForms和codebehinds這應該只包含最小量需要重定向到演示者的代碼。您可能還需要將自舉代碼放在那裏。這是由於一個ASP.Net的限制,你不應該從你的代碼隱藏引用任何東西。
  • 控制器項目被主持人項目所取代。這裏最大的區別是,主持人不得不通過WebForm實例化,而不是相反。

您還可以嘗試查看ASP.NET MVP project

相關問題