当你编写一个包含大量类的应用程序时,你是否为你的类名使用前缀/后缀?或者我应该只依赖我已定义的名称空间?
就我而言,我的课程如下:
Blur
Contrast
Sharpen
Invert
...
我只是不知道明天会发生什么,并希望尽可能与BCL中经常使用的类无碰撞。
有什么想法吗?
答案 0 :(得分:24)
命名空间的发明正是为了解决这个问题。使用它们。
答案 1 :(得分:11)
我会说不要使用前缀或后缀作为名称 - 这非常接近匈牙利符号,这被广泛认为是坏的,即使是MS的创建者也是如此。这个规则的唯一例外是接口,许多人认为可以使用I
作为前缀,但我认为接口也不应该有前缀。您应该将与命名空间相关的类分组以防止冲突。
答案 2 :(得分:7)
除非:
,否则请避免使用前缀或后缀类IFilter
GaussianBlurStrategy
ImageDoesNotSupportFilterTypeException
FilterBase
我被最后一个撕裂了。我不喜欢看到Base后缀,但是对于API的消费者而言,要知道他们无法根据名称实例化Filter(不先尝试),这真的很难。我不喜欢它,但这是我使用的惯例。
修改强>
根据Jon B的评论,使用Handler
后缀自定义代理很常见(FilterExecutedHandler(object sender, FilterEventArgs e);
)。虽然委托声明本身不是一个类,但它可能导致名称冲突,所以应该在这里说明。
答案 3 :(得分:4)
通常,我会将它们命名为描述性内容(就像您所说的那样),但我将它们分成适当命名的命名空间。
在你的情况下,我会像
那样namespace AppName.ImageOperations
{
public class Blur{...}
}
答案 4 :(得分:1)
如果你有一个公共基类或接口(例如类效应或接口IEffect),那么我可能会使用Effect作为这些类的后缀。
否则我倾向于使用命名空间。
答案 5 :(得分:1)
在工作中,我们为所有类使用前缀,而某些类使用后缀。这确实阻止了BCL的碰撞,但在我看来这是不必要的。你最好使用合理的命名和良好的命名空间。
我建议在接口上使用I前缀,但这只是个人偏好。
答案 6 :(得分:1)
实际上我不太关心前缀/后缀以及更多关于命名空间分区和类名的信息。我希望类名有意义,但我也想要正确的命名空间,以避免冲突并统一我的公司代码库。
实施例
namespace Company.Department.Product
{
public class Class
{}
}
这使得分区代码变得非常容易,并帮助程序员决定将功能放在何处。设置需要更多时间,但我觉得最终还是值得的。
答案 7 :(得分:1)
Guidelines for Names(来自Microsoft)是一个有趣的阅读......
对于命名空间,他们说:
命名空间名称的一般格式如下:
<Company>.(<Product>|<Technology>)[.<Feature>][.<Subnamespace>]
例如, Microsoft.WindowsMobile.DirectX
对于课程,他们说一件事:
不要给类名添加前缀(例如 如字母C)。
接口,应该以。开头 字母I,是例外 这个规则。
值得至少扫描一下以获取一些想法......