2017-06-22 24 views
0

也張貼在這裏,但沒有真正的學術答案: why namespace types should not depend on nested namespaces types?爲什麼類型不依賴於其包含的名稱空間中的類型?

如果我理解正確的話,問題是,一種類型Product.Business.Modules.Module可以圍繞取決於Product.Business.Product,但沒有其他辦法,因爲Product是基礎Module。然而,看我的項目結構,我違反了這個指導原則:

namespace Product.Business 
{ 
    using Modules; 

    class Product 
    { 
     public IEnumerable<Module> Modules { get; } 

     // Module is abstract, with many different kinds defined in Modules. 
    } 
} 

但是,我想延長這個問題。

  1. 在哪裏可以找到支持信息支持這一方針?
  2. 爲什麼這是不好的做法?
  3. 是否有效的類型依賴於來自其他名稱空間的類型與相同的包含名稱空間? (如Product.Business.Security取決於Product.Business.Modules類型?

在某種意義上違反本準則創造了某種循環命名空間的依賴,但我想了解更多本指南的爲什麼的,而不僅僅是一條毯子聲明。唯一的其他信息,我能找到的就是從鏈接的MSDN文章,這可以改變一個類庫顯著的結構和佈局。

回答

0

首先,我會解決您的問題,第三次,我有沒有看到任何反對的建議,似乎是一個合理的做法。你邏輯上分隔命名空間,你的代碼的一個分支可能會讓你另一個。

但是,在嵌套命名空間時,您正在創建層次結構。作爲一個假設的例子,考慮一個正在測試他們正在開發的一些數據工具的公司:Company.Data將具有Company.Data.SqlServer將依賴的抽象類和基類。 SqlServer爲包含名稱空間中的抽象內容提供了特定的實現。由於反饋或需要支持其他數據庫系統,時間可能會在可維護性,他們決定移動SqlServer班列到一個不同的庫。

使新組件參考原始Company.Data並繼續是微不足道的。 Company.Data中的類將繼續進行,就像沒有任何更改。但是,如果他們對所包含的命名空間和/或它的類的依賴關係,這樣做打破Company.Data。它將打破分離問題的目的。如果他們做一個產品,以支持MySQL,Company.Data.MySql會對Company.Data.SqlServer依賴這意味着什麼。

技術,如Provider Model design Pattern將不再是可能的或可行的。

相關問題