我正在学习MVP模式。在一些例子中,我看到了这个!任何人都可以证明为什么程序员使用这个名称约定?IController,IObserver之类的名称前的前缀“I”是什么?
回答
通常我在那里表示一个接口。没有我是一堂课。我个人不喜欢这个。我认为这在网络中更常见。我还没有看到它在Java中太多
原因,我不喜欢:
- 的IDE现在表明,指示类是否是一个接口或没有图标。
- 如果我想将接口更改为抽象类,则必须重命名类
- 它会伤害可读性。
'我'代表界面。将接口与类/结构区分开来是一种常见的命名约定。
接口是而不是类 - 它们定义的行为和类提供了实现。
阅读这篇文章在MSDN上的详细信息:Choosing Between Classes and Interfaces
接口定义签名的一组成员 实施者必须提供的。接口无法为成员提供实施 的详细信息。例如,ICollection界面 定义了与处理集合相关的成员。 实现接口的每个类都必须提供 这些成员的实现细节。类可以实现多个接口。
这是针对微软相关技术还是所有编程语言,我们都有这样的代码约定? – 2013-03-14 10:36:56
主要是微软。 – 2013-03-14 13:05:27
这是一个从Hungarian notation被认为是一个好主意的年龄的神器。它让用户知道名称是用于界面的。
此外,这是一个非常愚蠢的做法。
接口的名称应反映它表示的类之间的合同种类。它应该而不是告诉你它已被绑定到哪个类。
应该class PDF extends Document implements Printable
,因为它可以让你知道类实现某种原因print()
方法(在一个真实的世界,将是实际上是一个糟糕的API设计,但是这是一个例子)的代替class PDF extends Document implements IDocument
..因为这告诉你没有什么。
- 1. 当我称之为类方法名称前的括号中的参数(?或前缀)时,该做什么?
- 2. 按前缀过滤数组 - 该函数的名称是什么?
- 3. python字符串之前的b前缀是什么意思?
- 4. 什么是注册前缀?
- 5. 什么是表格前缀?
- 6. Python字典键/带前缀的值 - 前缀是什么?
- 7. CString变量名称前缀
- 8. 前缀相同名称前增量
- 9. 是否为MovieClip名称保留“_”前缀?
- 10. 为什么git大写我的分支名称前缀?
- 11. 为项目名称添加列名前缀的优点/缺点是什么?
- 12. 名称&注册您的类与所需的名称而不是前缀T
- 13. '&'和'!'的含义是什么?属性名称之前?
- 14. 锁前缀的范围是什么?
- 15. CSS前缀的用途是什么?
- 16. 什么是r-前缀的函数?
- 17. ruby中的类名之前的符号/运算符是什么?
- 18. 属性名称的下划线前缀?
- 19. 前缀不起作用的SAS名称
- 20. 没有“lib”前缀名称的cmake add_library
- 21. 变量之前括号中的类型名称是什么意思?
- 22. 什么是Fluent在WPF控件名称“Fluent:RibbonWindow”中表示的前缀?
- 23. 为什么没有XMLNS前缀的XML属性不等于具有相同本地名称的前缀属性?
- 24. 为什么前缀返回没有特定前缀的文档?
- 25. 命名元素时,XAML中x:前缀的用途是什么?
- 26. NS前缀是什么意思?
- 27. Enterprise Architect在“::”之前编辑类名称
- 28. 包名称之前的关键字'unit'有什么作用?
- 29. 为我的所有框架类名称加前缀不好吗?
- 30. 在Objective-C中强调前缀变量名称是什么意思?
1)考虑下面这行代码:'ICollection collection = this.Foo();'你在IDE中没有图标。 2)从合同切换到实现*是代码的重大变化(没有多重继承)3)请参阅点1) – 2013-03-14 10:33:54
1)更正你没有图标,但你真的在乎它是否是一个接口吗? 2)同意它将更改代码,但为什么我必须重新命名为重构的一部分。我想专心于编译和结构。 3)让我在那里我不认为有助于可读性。它使得班级名称更难以记住IMO – RNJ 2013-03-14 10:36:13
3)你不会将'I'添加到类中 - 因此班级的名称是* not *难以记忆,并且避免混淆什么是类和什么是界面;-) – 2013-03-14 13:07:09