【发布时间】:2010-10-24 12:40:09
【问题描述】:
什么应该进入顶级命名空间?比如我有MyAPI.WebLogic、MyAPI.Compression等,如果我把类放到顶层命名空间,是不是违反了封装原则?
【问题讨论】:
标签: c# .net vb.net namespaces oop
什么应该进入顶级命名空间?比如我有MyAPI.WebLogic、MyAPI.Compression等,如果我把类放到顶层命名空间,是不是违反了封装原则?
【问题讨论】:
标签: c# .net vb.net namespaces oop
取决于类是什么。
我尝试遵循的一个准则是命名空间之间的依赖关系不应遵循一个循环。换句话说,低级命名空间不能访问高级命名空间的类型。
这意味着顶级 MyAPI 命名空间必须包含:
Patrick Smacchia 写了很多关于以这种方式构建代码的优势的文章,包括在这个网站上:Detecting dependencies between namespaces in .NET
【讨论】:
据我所知,您根本没有违反封装。事实上,我什至不确定这是否可以称为封装,因为命名空间不是特定于 OOP 的——它只是类型的组织。
如果您认为某个类型属于顶级名称空间,那么规则就是将其放置在顶级名称空间中。这种情况的一个明显示例是(使用您的示例)MyAPI.WebLogic 和 MyAPI.Compression(可能以及其他)都需要使用某种类型 - 因此最好将这种类型放在 MyAPI 中。如果您仍然不太确定属于什么,请使用 Microsoft 库作为示例。 BCL 中的System 命名空间中有很多类!
【讨论】:
我认为您这样做并没有真正违反封装本身。
通常,命名空间只是一种组织类的方式,使它们更容易找到,所以对你的应用有意义。
【讨论】:
命名空间不适用于与 OOP 相关的概念,例如封装。那里是为了组织,所以以对您的应用程序有意义的方式组织它。我在网站上所做的大部分工作都有一个业务库,而且大多数情况下它都隐藏在一个命名空间下。
【讨论】:
取决于命名空间的真正用途。如果它是一个应用程序,那么可能是引导程序类、加载程序 etx、Main's 等。我会说(就像所有事情一样)“这取决于”。
【讨论】: