C# 名称空间设计和类分离
我很难找到一个好的名称空间设计和类顺序。 假设我们有以下命名空间层次结构:C# 名称空间设计和类分离,c#,.net,namespaces,C#,.net,Namespaces,我很难找到一个好的名称空间设计和类顺序。 假设我们有以下命名空间层次结构: MyCompany.Hardware - ClassA MyCompany.Hardware.DeviceType1 - ClassB : ClassA MyCompany.Hardware.DeviceType2 - ClassC : ClassA MyCompany.Hardware.Reader - ReaderClass
MyCompany.Hardware
- ClassA
MyCompany.Hardware.DeviceType1
- ClassB : ClassA
MyCompany.Hardware.DeviceType2
- ClassC : ClassA
MyCompany.Hardware.Reader
- ReaderClassC : Reader
问题:
ReaderClassC
应该位于单独的命名空间中还是位于同一命名空间中MyCompany.Hardware.DeviceType2
?或者我应该选择父命名空间进行“快速”访问MyCompany.Hardware
)希望你明白我想说什么。如果您能告诉我您的名称空间设计,那就太好了。像往常一样,这是一个品味问题 我更喜欢使用你的第四种方法,因为它(对我来说)更干净一些。我的意思是,如果我使用的是阅读器,那么我就依赖于使用这个名称空间 当然,您可以查看以下内容,尤其是: 嵌套命名空间应该依赖于包含 命名空间。例如,System.Web.UI.Design中的类取决于 在System.Web.UI中的类上。但是,System.Web.UI中的类 不要依赖System.Web.UI.Design中的类
和往常一样,这是品味的问题 我更喜欢使用你的第四种方法,因为它(对我来说)更干净一些。我的意思是,如果我使用的是阅读器,那么我就依赖于使用这个名称空间 当然,您可以查看以下内容,尤其是: 嵌套命名空间应该依赖于包含 命名空间。例如,System.Web.UI.Design中的类取决于 在System.Web.UI中的类上。但是,System.Web.UI中的类 不要依赖System.Web.UI.Design中的类
这取决于其他的定义——当你有很多类型时,名称空间是很有用的,所以如果你的
ClassB
附带了很多与Hardware1
相关的东西,那么为它设置内部名称空间是非常有意义的
理想情况下,您应该只遵循逻辑分组。您询问了关于
ReaderC
,如果它与DeviceType2
相关而与其他相关,则它不应位于父命名空间中,如果ClassA
是所有硬件类型的基础,则它也需要位于父命名空间中 这取决于其他定义-当您有很多类型时,名称空间是有用的,因此如果您的ClassB
附带了很多与Hardware1
相关的内容,那么为其设置内部名称空间是非常有意义的
理想情况下,您应该只遵循逻辑分组。您询问了关于
ReaderC
,如果它与DeviceType2
相关而与其他相关,则它不应位于父命名空间中,如果ClassA
是所有硬件类型的基础,则它也需要位于父命名空间中 假设您对面向对象编程相对较新,那么这只是我的特别建议。我认为你的问题涉及到设计的一个领域,这个领域需要讨论和编程风格的选择
也就是说
名称空间的主要目标之一是对类型进行分组,以便其他“客户机”或引用其包含类库的程序可以轻松地重用这些类型
考虑到这一点,为了简单起见,您可以从一个名称空间开始,并在名称空间增加价值时引入名称空间
在您的示例中,它们可能无法增加价值的一个地方是DeviceType1和DeviceType2。根据我的经验,这些将属于同一名称空间
namespace Acme.Hardware {
class Product
{
public int Price { get; set; }
public bool InStock { get; set; }
}
class Hammer : Product
{
}
class ScrewDriver : Product
{
}
}
作为编码样式和名称空间如何相交的示例,请注意我是如何使用非常通用的名称Product
,而不是HardwareProduct
。我在这里使用了一个通用名称,因为我知道该名称将由使用Acme.Hardware的或完全限定的Acme.Hardware.Product
包含使用。在这两种情况下,附近都有上下文信息
一般来说,我会首先关注类(即它们的功能和实现),然后关注名称空间,将它们视为分组类的有用方式。假设您对面向对象编程比较陌生,这只是我的特别建议。我认为你的问题涉及到设计的一个领域,这个领域需要讨论和编程风格的选择
也就是说
名称空间的主要目标之一是对类型进行分组,以便其他“客户机”或引用其包含类库的程序可以轻松地重用这些类型
考虑到这一点,为了简单起见,您可以从一个名称空间开始,并在名称空间增加价值时引入名称空间
在您的示例中,它们可能无法增加价值的一个地方是DeviceType1和DeviceType2。根据我的经验,这些将属于同一名称空间
namespace Acme.Hardware {
class Product
{
public int Price { get; set; }
public bool InStock { get; set; }
}
class Hammer : Product
{
}
class ScrewDriver : Product
{
}
}
作为编码样式和名称空间如何相交的示例,请注意我是如何使用非常通用的名称Product
,而不是HardwareProduct
。我在这里使用了一个通用名称,因为我知道该名称将由使用Acme.Hardware
的或完全限定的Acme.Hardware.Product
包含使用。在这两种情况下,附近都有上下文信息
一般来说,我会首先关注类(即它们的功能和实现),然后关注名称空间,将它们视为分组类的有用方法