6

我有一个Device在 namespace 中的类Proj.Devices。这个类可以访问Message命名空间中的类吗Proj.Devices.Messages?两个类都在同一个项目中。我不是在问这是否可能,而是这是否是一种不好的做法?

我认为如果我将此项目拆分为单独的项目,循环引用会出现问题,否则可以吗?

编辑:我在命名空间命名指南中找到了这个

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

4

2 回答 2

11

我不能同意莫比亚。命名空间不仅仅用于分组,它们是逻辑分离(组件),其中程序集是具体的分离(层和关注点)。

它们也经常被视为分层的。从哲学上讲,层次结构中较低的东西通过其父元素存在,而父元素可以在没有这个特定子元素的情况下存在。

我认为这就是为什么Core现在存在命名空间的原因。基本命名空间只是基本结构/基础。

如果子命名空间被其基本命名空间使用,您可以确定在大多数情况下会存在相互依赖关系:这揭示了架构风险。

应该避免,因为:

  • 依赖疯狂:
    • 相互依赖
    • 如果没有子命名空间,您的基本命名空间就无法存在
    • 如果没有这个子命名空间等等,所有引用基本命名空间的东西都不能存在......
  • 调试步骤将不太容易理解
  • 堆栈跟踪将不太容易理解

如果你不关心架构,那不是问题。但是如果你问自己这个问题,你已经在考虑编写好的代码了——这意味着新的用法会到来,而不仅仅是为了你自己;)-。

这就是为什么存在这样的做法来避免高耦合的原因:

  • 接口
  • 扩展方法
  • 虚拟/覆盖

建筑是关于时间的,而不仅仅是美。在一定的成熟度下,无架构代码的可维护性、可理解性和可扩展性较差。

于 2014-01-03T16:14:34.580 回答
1

是的,他们可以,命名空间只是类的分组。不,这不是坏习惯,这是正常情况。

如果两个命名空间中的类相互引用,那么将它们放在单独的项目中并不是一个好主意,只要它们在同一个项目中就可以了。

于 2013-08-09T11:20:49.333 回答