2013-02-15 116 views
2

我明白如何物理分组类,即继承,组合等。但是,我从来没有真正理解命名空间(类的逻辑分组)的好处。我通常有表示层命名空间,业务逻辑层命名空间和数据访问层即:命名空间 - 逻辑分组类

com.Application.BusinessLogicLayer 
com.Application.PresentationLayer 
com.Application.DataAccessLayer 

命名空间有时表现层将有例如一个以上的应用VB.NET应用程序和ASP.NET应用程序。有时业务逻辑层将被拆分成多个DLL。

我可以回答关于什么命名空间的考试问题,但我很难将知识应用到问题域。例如,看一下下面的代码:

Namespace com.application.businesslogiclayer 
    Public Class ClassA 
     Private CB As ClassB 
    End Class 
End Namespace 
Namespace com.application.businesslogiclayer 
    Public Class ClassB 
     Private CC As ClassC 
    End Class 
End Namespace 

Namespace com.application.businesslogiclayer 
    Public Class ClassC 

    End Class 
End Namespace 

由于ClassA的有ClassB的一个组合关系和ClassB有ClassC的组成关系,那么我相信他们应该在同一个命名空间都属于如

com.application.businesslogiclayer.classABC

。但是,您可以使用“导入”语句引入其他类,因此这可能不正确。

开发人员在设计命名空间时使用什么标准?

回答

4

名称空间不仅用于逻辑分组类型,而且还用于避免命名类型间的冲突,因为名称空间也是完整类型名称的一部分。例如,您可能在您的应用程序中有一个名为Log的类,但您也可以引用其他人编写的另一个程序集,该程序集也有一个名为Log的类。在某些实现中可能会有一个实际的理由使用两个Log类(即因为它们执行不同类型的日志记录,或者一个用于记录信息,另一个代表树的一部分),并且名称空间允许编译器区分两个Log类。不要打折使用名称空间进行分组的有用性,因为这对于大型项目来说变得更加重要。

就条件而言,从一个名称空间开始。随着应用程序的发展,您可能需要使用两个或多个嵌套命名空间来整理单个命名空间,以更好地组织代码,也许可以折叠一些当前未在IDE中使用的代码,以便让它脱离您的方式,但分组应该合乎逻辑和有意义。在.NET中,遵循基类库中名称空间的设计原则和示例。

+0

谢谢+1,以避免类型之间的冲突。我在这里问了一个关于DLL的类似问题:http://stackoverflow.com/questions/14901617/multiple-dlls-for-one-layer,以防你有时间回答。 – w0051977 2013-02-15 19:08:20

2

我推荐阅读Design Guidelines for Developing Class LibrariesTypes and Namespaces页面。这将详细介绍何时应该使用名称空间,并提供一般指导。

通常,将您的类型组织到单独的名称空间中,其中相关的功能被分组到一个名称空间中,这有助于保持项目的组织性。

就您而言,您可能希望将所有主要业务逻辑放入一个名称空间,但将表示逻辑分隔到其自己的名称空间中。这在很多方面都有帮助,包括允许编译器帮助防止混淆担忧(如果不显式添加Import语句,则不能使用错误的类)。

这也有助于避免类型名称冲突,因此您可以在每个问题区域内拥有简单,干净,易于理解的名称。

+0

谢谢,第二个链接为+1。我在这里问了一个关于DLL的类似问题:stackoverflow.com/questions/14901617/...,以防你有时间回答。 – w0051977 2013-02-15 19:09:18