c# - 我应该在类名中包含 namespace 提示吗?

标签 c# naming-conventions

如果我有一组可能有多个实现的接口(interface)(即内存中、NHibernate、基于 xml 等),在类名本身中提供 namespace 提示是否明智?例如:

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...

在第二种情况下,通过类名本身很清楚我在代码中的任何地方使用了哪个实现,但是按 namespace 对它们进行分组然后将其包含在类名中似乎有点多余,不是吗?

第三种选择可能是:

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...

我已经消除了多余的命名空间,但现在对类进行分组/组织的唯一方法是按类名前缀。我想我可以将它们分成文件夹并手动调整任何新创建的文件中的命名空间。这些样式中的一种与其他样式相比有什么明显的优势吗?

最佳答案

好问题。我会用另一个答案来回答,有人需要同时使用 ISomeProvider 的多个实现的可能性有多大?如果是这样,仅通过命名空间来消除歧义将导致需要一些讨厌的完全限定命名空间。

如果不是,我将使用命名空间来指示实现的性质,但始终共享相同的名称。不管怎样,您的 API 是由接口(interface)而不是具体实现定义的,这意味着无论您选择哪种方式,人们都可以很容易地互换实现。

关于c# - 我应该在类名中包含 namespace 提示吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10692814/

相关文章:

c# - 使用鼠标中键关闭 winforms 选项卡控件上的选项卡

c# - 如何获取 xml 节点名称和内部文本和填充 GridView

c# - C#如何使用操作系统的复制粘贴功能

python - 使用原始文件名的部分动态命名导入 Python 的 DataFrame

objective-c - 启用/禁用或激活/停用的方法的命名约定

C# 将非模态形式放在模态形式前面?

c# - Int/Int64 .Net 内存分配

ios - 初始化器中的局部参数标签命名约定

c - 我应该为结构使用哪种命名约定?

url-rewriting - URL 中的破折号与下划线