2013-04-24 97 views
2

剛剛完成我的一個項目並即將開始另一個項目。這從來沒有在我的大學教過,所以我甚至不知道它是否存在。可以說,例如你有代碼...c#使用不在表單中的代碼來減少重複代碼?

MessageBox.Show("Hi"); 

現在我知道我可以在Form1中調用它。 我也知道我可以用另一種形式叫它提供它在公共課/虛空或什麼?

我的問題是,是否有一個圖書館系統,我可以添加30-40代碼snippits每個做自己的工作。所以當我想更新SQL或運行計算,我只是從庫中調用一個代碼文件?

對不起,如果我失去了一些明顯的谷歌正在逼我瘋了,我知道我想問什麼,只是不怎麼問它!希望你明白我的問題.. 謝謝,問候..

回答

7

當然。在Visual Studio中的解決方案中,您可以添加一個類庫項目並將其填入所需的所有可重用代碼。然後,解決方案中的任何項目都可以通過向該項目添加項目引用來引用它。

請注意,這樣的事情很容易出問題。舉個例子,你的例子:

MessageBox.Show("Hi"); 

MessageBox類緊密耦合到用戶界面。所以它屬於的用戶界面對象。 (這種情況下的形式)。這是因爲如果你嘗試在類庫中使用它,那麼你需要將用戶界面庫添加到該類庫中,從而使它與該特定的用戶界面實現更加緊密地結合。這使得類庫的便攜性更低,並且可重用性更低,因爲它可以用只有被相同用戶界面技術的項目使用。 (例如,Web項目無法使用。)

因此,您需要考慮將每個常用工具封裝到自己的可重用代碼中。它是否屬於用戶界面,業務對象,數據訪問等?如果它與特定的外圍技術(用戶界面技術,數據訪問技術等)緊密結合,那麼它可能屬於那裏。

一種方法是擁有多個「通用工具」庫。使用人爲的命名方案,大型企業域解決方案可能有項目是這樣的:

  • Domain.BusinessLogic(類庫,通過一切引用)
  • Application.Forms.AdminPanel(窗體應用程序)
  • 應用.Forms.OperationsPanel(表單應用程序)
  • Application.Forms.Common(類庫,由其他Forms應用程序引用)
  • Application.Web。PublicWebsite(Web應用程序)
  • Application.Web.Common(類庫,其他Web應用程序中引用)
  • Infrastructure.DataAccess.SQLServer(類庫,依賴注入到域)
  • Infrastructure.Vendor.SomeService (類庫,依賴注入到域)

所以,你有一個核心業務邏輯的項目,其中包含任何的普遍到您正在使用的所有業務領域。它應該有沒有依賴關係。 (不依賴於用戶界面,數據庫,框架等)然後你有各種技術的應用程序,其中混合類庫具有應用程序耦合的通用功能。最後你還有域的其他外圍,即後端依賴。這些可能是您的數據訪問層,與第三方系統和服務的集成等。

由於任何給定的功能都被抽象爲一個通用工具來減少重複和增加重複使用,請注意保持代碼 - 低耦合,所以「常用工具」不緊密地束縛於「不常見的依賴」。業界經常會發現與代碼重用的緊密耦合增加。 (請參閱Single Responsibility Principle。)因此,請謹慎行事以避免發生。

如果它服務於多個責任並且不應該混合這些責任,那麼編寫同一段代碼(單獨由按鍵代替「不變」,不一定以概念爲目的)不會有一次固有錯誤。

4

聽起來像你想使用靜態方法。由他們做什麼,並把它們放在一個靜態類組的程序,.e.g

internal static class Utility 
{ 
    public static void Method1(int whatever) 
    { 
     // do stuff 
    } 

    public static void Method2(string another) 
    { 
     // do other stuff 
    } 

} 

然後,您可以那樣稱呼他們:

Utility.Method1(7); 
Utility.Method2("thingy"); 
+0

但是,靜態方法屬於一個組或創建一個新的文件,在C#項目解決方案? – 2013-04-24 22:49:50

+0

@NicholasMordecai你可以創建一個新文件,雖然沒有什麼能夠阻止你將多個類放入一個單獨的文件中,並且對於小而緊密相關的類在單個文件中是相當常見的做法(在c/C++中定義更是如此) 。 – evanmcdonnal 2013-04-24 22:52:15

+0

如果需要,可以將靜態方法添加到現有類中,這取決於它是否適合該類。至於新的靜態類 - 你有權將它放在現有的文件或新的文件中 - 編譯器不關心,只要這個類的命名空間可以訪問調用者。 – 2013-04-24 22:53:26

1

簡單的解決方案是創建一個新項目並選擇「類庫」選項。這將創建一個編譯爲DLL(動態鏈接庫)的類。任何你想要使用這個通用代碼的地方都可以添加一個對程序集的引用,然後在你使用它的特定文件中,你必須爲它添加一個using語句。

如果您需要打開多個項目,則可以將所有項目都放在一個解決方案中。如果右鍵單擊該解決方案並選擇下拉菜單的屬性選項,則會在左側導航欄中打開一個帶有「配置屬性」選項的新窗口。選擇它,然後你可以指定構建依賴關係。因此,如果您有項目A和B使用項目C中的方法(類庫),那麼您可以將其設置爲構建依賴項,這意味着無論何時構建項目A,B或解決方案作爲整體,它都將首先構建項目C.

這通常是企業軟件的結構;一些dll或exe是應用程序級代碼,然後是許多其他構建通常由多個項目共享的代碼的項目。所有這些通常都置於單一解決方案的保護下。

如果你走這條路線有更多的細節(比如你在調試時默認運行的exe),我可以更新它。在大學裏你可能沒有教過任何東西,但是一旦你開始了第一份工作,你很可能會看到。