【发布时间】:2012-05-22 05:32:22
【问题描述】:
如果我有一组可能有多个实现的接口(即内存中、NHibernate、基于 xml 等),那么在类名本身中提供命名空间提示是否明智?例如:
MyDomain.Infrastructure.ISomeProvider
MyDomain.Infrastructure.ISomeOtherProvider
MyDomain.Infrastructure.IYetAnotherProvider
我可能有:
MyDomain.Infrastructure.Impl.MemoryBased.SomeProvider
MyDomain.Infrastructure.Impl.MemoryBased.SomeOtherProvider
MyDomain.Infrastructure.Impl.MemoryBased.YetAnotherProvider
MyDomain.Infrastructure.Impl.XmlFileBased.SomeProvider // etc...
MyDomain.Infrastructure.Impl.NHibernate.SomeProvider // etc...
对比
MyDomain.Infrastructure.Impl.MemoryBased.MemoryBasedSomeProvider
MyDomain.Infrastructure.Impl.MemoryBased.MemoryBasedSomeOtherProvider
MyDomain.Infrastructure.Impl.MemoryBased.MemoryBasedYetAnotherProvider
MyDomain.Infrastructure.Impl.XmlFileBased.XmlSomeProvider // etc...
MyDomain.Infrastructure.Impl.NHibernate.NHibernateSomeProvider // etc...
在第二种情况下,通过类名本身很清楚我在代码中的任何地方使用了哪个实现,但是按命名空间对它们进行分组然后将其包含在类名中似乎有点多余,不是吗?
第三个选项可能是:
MyDomain.Infrastructure.ISomeProvider
MyDomain.Infrastructure.Impl.MemoryBasedSomeProvider
MyDomain.Infrastructure.Impl.MemoryBasedSomeOtherProvider
MyDomain.Infrastructure.Impl.MemoryBasedYetAnotherProvider
MyDomain.Infrastructure.Impl.XmlSomeProvider // etc...
MyDomain.Infrastructure.Impl.NHibernateSomeProvider // etc...
我已经消除了多余的命名空间,但现在对类进行分组/组织的唯一方法是通过类名前缀。我想我可以将它们分成文件夹并手动调整任何新创建的文件中的命名空间。其中一种风格比其他风格有什么明显的优势吗?
【问题讨论】:
-
投反对票,并投票结束 - 认真吗?这是一个很好的问题。
-
赋予您的用户监管内容的能力的问题在于,您将不可避免地让用户选择滥用该特权,除了增强他们的优越感之外,根本没有任何真正的理由。
-
没错,看起来你有 3x +1,所以趋势正朝着正确的方向发展!
标签: c# naming-conventions