2011-04-04 71 views
1

让我对.NET感到恼火的事情之一是,名称空间应该是Pascal,这可能会导致名称空间/类名冲突。什么是名称空间vs classname冲突问题的优雅解决方案?

考虑以下几点:

namespace MyCompany.MyProduct.SalesOrder { 
    public class SalesOrder { 
    } 
} 

这是完全合法的代码,但是消费者SalesOrder为一类现在必须使用的MyCompany.MyProduct.SalesOrder.SalesOrder否则编译原因恼人'MyCompany.MyProduct.SalesOrder' is a 'namespace' but is used like a 'type'错误完全合格的名称。

别人在做什么来解决这个问题?有些地方我看到其他人违反规则并使用小包装,这确实吸引了我,但我确实喜欢遵守标准并使用适当的外壳。在我迄今为止的使用中,我已尽可能地订阅了基于复数的名称空间名称的概念,但这有时看起来很难看。

我个人认为.NET错了,应该像使用Java的包一样使用底层的名称空间。

+2

不要将您的类命名为您的名称空间。这很少是必要的。 – Talljoe 2011-04-04 09:15:17

+0

Talljoe,我不争论我的班级名称与名称空间名称相同,问题是有时发生冲突。例如,如果我有一个具有名称空间“MyProduct.Drawing”的绘图产品,因为我希望它对'System.Drawing'命名空间建模,但是后来我想在MyProduct.Drawing内部创建一个名为Drawing的类。另一个问题是,我有一个使用'System.Drawing'的产品,我有一个名为'Design'的类,它与'System.Drawing.Design'命名空间冲突。再次强调,我认为命名空间应该全部小写。 – 2011-04-04 09:26:55

+1

您可以使用命名空间别名[http://msdn.microsoft.com/en-us/library/sf0df423.aspx]通过使其明确表达您想要的内容来解决此问题: using Design = MyProduct.Drawing.Design; – Talljoe 2011-04-04 09:33:19

回答

2

它完全赞同你,这种行为是绝对烦人的。我通常只是倾向于给名称空间一个更通用的名称。在你的情况下,我会选择类似MyCompany.MyProduct.SalesOrderManagement或只是MyCompany.MyProduct.SalesOrders

+0

感谢弗洛里安,我认为复数形式是整洁的,我讨厌使用这种长名称的类/名称空间,整个.NET类库都充满了不必要的长类名。感谢这篇文章。 – 2011-04-04 09:22:43

3

SalesOrder作为命名空间的目的是什么?命名空间应该是一个“空间”,因此它应该覆盖多于一个类。遵循此规则,您不应该在类和名称空间之间发生冲突。

+0

名称空间应该分隔你的逻辑项目,'SalesOrder'是一个模块,这个名字空间下的类可以是'ISalesOrderService','SalesOrder','SalesOrderLine','HibernateSalesOrderService'。注意'SalesOrder'类,我试图为发生冲突的名称空间名称建立一个通用规则。 – 2011-04-04 09:21:25

相关问题