【问题标题】:What should go into a top level namespace?什么应该进入顶级命名空间?
【发布时间】:2010-10-24 12:40:09
【问题描述】:

什么应该进入顶级命名空间?比如我有MyAPI.WebLogic、MyAPI.Compression等,如果我把类放到顶层命名空间,是不是违反了封装原则?

【问题讨论】:

    标签: c# .net vb.net namespaces oop


    【解决方案1】:

    取决于类是什么。

    我尝试遵循的一个准则是命名空间之间的依赖关系不应遵循一个循环。换句话说,低级命名空间不能访问高级命名空间的类型。

    这意味着顶级 MyAPI 命名空间必须包含:

    • 高级代码:允许查看 MyAPI.WebLogic 和 MyAPI.Compression 内部的代码
    • 或者,低级代码:MyAPI.WebLogic 和/或 MyAPI.Compression 使用的代码

    Patrick Smacchia 写了很多关于以这种方式构建代码的优势的文章,包括在这个网站上:Detecting dependencies between namespaces in .NET

    【讨论】:

    • 当你说你的指导方针是“低级命名空间不能访问高级命名空间的类型”时,这不是很难执行吗,因为似乎在低级声明的类-level 命名空间会自动访问更高级别的命名空间,而不需要显式的 'using' 语句?
    【解决方案2】:

    据我所知,您根本没有违反封装。事实上,我什至不确定这是否可以称为封装,因为命名空间不是特定于 OOP 的——它只是类型的组织。

    如果您认为某个类型属于顶级名称空间,那么规则就是将其放置在顶级名称空间中。这种情况的一个明显示例是(使用您的示例)MyAPI.WebLogic 和 MyAPI.Compression(可能以及其他)都需要使用某种类型 - 因此最好将这种类型放在 MyAPI 中。如果您仍然不太确定属于什么,请使用 Microsoft 库作为示例。 BCL 中的System 命名空间中有很多类!

    【讨论】:

      【解决方案3】:

      我认为您这样做并没有真正违反封装本身。

      通常,命名空间只是一种组织类的方式,使它们更容易找到,所以对你的应用有意义。

      【讨论】:

        【解决方案4】:

        命名空间不适用于与 OOP 相关的概念,例如封装。那里是为了组织,所以以对您的应用程序有意义的方式组织它。我在网站上所做的大部分工作都有一个业务库,而且大多数情况下它都隐藏在一个命名空间下。

        【讨论】:

          【解决方案5】:

          取决于命名空间的真正用途。如果它是一个应用程序,那么可能是引导程序类、加载程序 etx、Main's 等。我会说(就像所有事情一样)“这取决于”。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-11-17
            • 1970-01-01
            • 1970-01-01
            • 2011-04-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多