【问题标题】:why namespace types should not depend on nested namespaces types?为什么命名空间类型不应该依赖于嵌套的命名空间类型?
【发布时间】:2012-07-13 01:52:27
【问题描述】:

.Net 命名指南 (http://msdn.microsoft.com/en-us/library/893ke618(v=vs.71).aspx) 中有这样的声明:

“嵌套命名空间应该依赖于包含命名空间中的类型。例如,System.Web.UI.Design 中的类依赖于 System.Web.UI 中的类。但是,System. Web.UI 不依赖于 System.Web.UI.Design 中的类。”

我想知道:为什么?

【问题讨论】:

  • 您是否有幸找到有关本指南的其他信息?我觉得它是在没有任何支持信息的情况下创建的。回顾我过去的所有项目,我每次都违反这个准则。我理解指导方针。例如,我的 Product.Business.Product.IEnumerable<Module> Modules { get; } 依赖于 Product.Business.Modules 中的 Module,这违反了准则,并且需要我将 Module 移动到父命名空间。
  • 到目前为止,对我来说仍然很有意义。

标签: c# namespaces


【解决方案1】:

因为当你想到它时它是有意义的。

让我用一个小例子来解释:

例如,刀刃需要一个手柄才能成为 “刀”。

但是手柄不需要刀刃作为手柄,对吗?

using KitchenSet;
using KitchenSet.Knives; // This is where your knives (what uses Blades) would live.
using KitchenSet.Knives.Blades; // The actual blades. 

【讨论】:

  • 那么,如果我在命名空间中有一个“句柄”类和一个嵌套命名空间“刀片”,其中有很多刀片类型要与我的句柄一起使用,那么更好的组织方式是什么?
  • @bcsanches:我也想知道(因为我做类似的事情);也许您应该将其添加到您的问题中作为示例?
  • @bcsanches:查看我的编辑。这样更容易理解吗?
  • 据我了解,KitchenSet.Knives 类型取决于 KitchenSet.Knives.Blades 中的类型,对吧?如果是这样,这不是msdn告诉我们要避免的吗?
  • 我的风格是在Kitchen.Knives 中有一个Blades 基本类型(接口或抽象),然后在Kitchen.Knives.Blades 中使用所有各种实现(Butcher、Paring、Butter)用于组织。
【解决方案2】:

这是一个明智的规则,因为 System.Web.UI 命名空间中定义的类对于 System.Web.UI.Design 中定义的类是可见的,但 System.Web.UI.Design 命名空间中定义的类不可见对于 System.Web.UI 命名空间中定义的类可见。后一种情况需要添加 using 语句(VB.NET 中的 Imports)。

【讨论】:

  • 但是当我阅读 msdn 中的推荐时,感觉我缺少一些基本的设计指南或良好实践。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-31
  • 2013-03-25
  • 1970-01-01
  • 1970-01-01
  • 2011-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多