2013-02-15 114 views
2

我明白如何物理分組類,即繼承,組合等。但是,我從來沒有真正理解命名空間(類的邏輯分組)的好處。我通常有表示層命名空間,業務邏輯層命名空間和數據訪問層即:命名空間 - 邏輯分組類

com.Application.BusinessLogicLayer 
com.Application.PresentationLayer 
com.Application.DataAccessLayer 

命名空間有時表現層將有例如一個以上的應用VB.NET應用程序和ASP.NET應用程序。有時業務邏輯層將被拆分成多個DLL。

我可以回答關於什麼命名空間的考試問題,但我很難將知識應用到問題域。例如,看一下下面的代碼:

Namespace com.application.businesslogiclayer 
    Public Class ClassA 
     Private CB As ClassB 
    End Class 
End Namespace 
Namespace com.application.businesslogiclayer 
    Public Class ClassB 
     Private CC As ClassC 
    End Class 
End Namespace 

Namespace com.application.businesslogiclayer 
    Public Class ClassC 

    End Class 
End Namespace 

由於ClassA的有ClassB的一個組合關係和ClassB有ClassC的組成關係,那麼我相信他們應該在同一個命名空間都屬於如

com.application.businesslogiclayer.classABC

。但是,您可以使用「導入」語句引入其他類,因此這可能不正確。

開發人員在設計命名空間時使用什麼標準?

回答

4

名稱空間不僅用於邏輯分組類型,而且還用於避免命名類型間的衝突,因爲名稱空間也是完整類型名稱的一部分。例如,您可能在您的應用程序中有一個名爲Log的類,但您也可以引用其他人編寫的另一個程序集,該程序集也有一個名爲Log的類。在某些實現中可能會有一個實際的理由使用兩個Log類(即因爲它們執行不同類型的日誌記錄,或者一個用於記錄信息,另一個代表樹的一部分),並且名稱空間允許編譯器區分兩個Log類。不要打折使用名稱空間進行分組的有用性,因爲這對於大型項目來說變得更加重要。

就條件而言,從一個名稱空間開始。隨着應用程序的發展,您可能需要使用兩個或多個嵌套命名空間來整理單個命名空間,以更好地組織代碼,也許可以摺疊一些當前未在IDE中使用的代碼,以便讓它脫離您的方式,但分組應該合乎邏輯和有意義。在.NET中,遵循基類庫中名稱空間的設計原則和示例。

+0

謝謝+1,以避免類型之間的衝突。我在這裏問了一個關於DLL的類似問題:http://stackoverflow.com/questions/14901617/multiple-dlls-for-one-layer,以防你有時間回答。 – w0051977 2013-02-15 19:08:20

2

我推薦閱讀Design Guidelines for Developing Class LibrariesTypes and Namespaces頁面。這將詳細介紹何時應該使用名稱空間,並提供一般指導。

通常,將您的類型組織到單獨的名稱空間中,其中相關的功能被分組到一個名稱空間中,這有助於保持項目的組織性。

就您而言,您可能希望將所有主要業務邏輯放入一個名稱空間,但將表示邏輯分隔到其自己的名稱空間中。這在很多方面都有幫助,包括允許編譯器幫助防止混淆擔憂(如果不顯式添加Import語句,則不能使用錯誤的類)。

這也有助於避免類型名稱衝突,因此您可以在每個問題區域內擁有簡單,乾淨,易於理解的名稱。

+0

謝謝,第二個鏈接爲+1。我在這裏問了一個關於DLL的類似問題:stackoverflow.com/questions/14901617/...,以防你有時間回答。 – w0051977 2013-02-15 19:09:18