什么应该进入顶级命名空间?例如,如果我有MyAPI.WebLogic、MyAPI.Compression等,如果我将类放入顶级命名空间中,我是否违反了封装原则?
命名空间不适用于 OOP 相关概念,例如封装。它们用于组织,因此以对您的应用程序有意义的方式组织它。我在网站上所做的大多数工作都有一个业务库,而且大多数情况下它都隐藏在一个命名空间下。
取决于课程是什么。
我尝试遵循的一个准则是命名空间之间的依赖关系不应遵循循环。换句话说,低级命名空间无法访问高级命名空间中的类型。
这意味着顶级 MyAPI 命名空间必须包含以下任一内容:
Patrick Smacchia 写了很多关于以这种方式构建代码的优点的文章,包括在此站点上:检测 .NET 中命名空间之间的依赖关系
取决于命名空间的真正用途。如果它是一个应用程序,那么可能是引导程序类、加载器 etx、Main 等。我会说(和所有事情一样)“这取决于”。
我认为你这样做并没有真正违反封装本身。
通常命名空间只是组织类以使它们更容易查找的一种方式,所以无论什么对您的应用程序有意义。
据我所知,您根本没有违反封装性。事实上,我什至不确定这是否可以称为封装,因为命名空间不是 OOP 所特有的 - 它只是类型的起源。
规则很简单,如果您认为类型属于顶级命名空间,则将其放置在顶级命名空间中。这种情况的一个明显的例子是(使用您的示例)MyAPI.WebLogic 和 MyAPI.Compression(也许以及其他)都需要使用某种类型 - 因此最好将此类型放入 MyAPI 中。如果您仍然不太确定属于什么,请使用 Microsoft 库作为示例。 BCL 中的
System
命名空间中有很多类!