Design patterns 何时在类名中包含设计模式名称?
在上一个项目中,我注意到在类名中包含设计模式名称非常方便。例如:Design patterns 何时在类名中包含设计模式名称?,design-patterns,Design Patterns,在上一个项目中,我注意到在类名中包含设计模式名称非常方便。例如: 环境懒散工厂 中间人 第三方播放机 MyProjectCliFacade 双星门 它使项目易于阅读。另外一个好处是,您不会使用自己的名字,如“RunnceManager”、“ContextDelayedConstruction”、“ThirdPartyInterface”等,这些名字可能只对作者有尖锐的含义。另一方面,我不希望在STL中看到像vector_容器这样的类。你觉得怎么样 我目前对此主题的看法是:作为类层次结构中重要
- 环境懒散工厂
- 中间人
- 第三方播放机
- MyProjectCliFacade
- 双星门
我目前对此主题的看法是:作为类层次结构中重要节点的类应该在其名称中包含其设计模式,以强调层次结构并使项目更易于阅读。在许多情况下,我觉得这很自然:
- 设计模式的命名是为了解释它们的作用
- 类的命名是为了解释它们的功能
另一方面,当设计模式主要是偶然的,则排除它。例如,一个类可能恰好是一个单例类,但这不是它的主要用途,所以我不希望在名称中看到“单例”。将其与一个主要目的是为其他对象制造工厂的工厂相比,“食品工厂”是非常有意义的。我同意你的观点。我要添加的唯一一件事(不用说)是确保类名中的模式名使用实际使用的模式
我曾经看到一个名为xxFactory(或类似的东西)的类,它与工厂模式没有任何相似之处 我还在类名中使用设计模式名称,以提高可读性,并便于其他人理解
向量对我来说已经是一个集合,所以不需要_集合。顺便说一句,容器不是设计模式。如果生成的名称足够清晰,请继续使用它
但在某些情况下,最终的名称要么笨拙,要么含糊不清。在这种情况下,使用最合适的名称。我认为在名称中使用设计模式是一个非常好的想法。例如,在我的一个游戏中,我有:
GameLevelAbstract
InGameArea
MainMenu
第二个类(InGameArea和MainMenu)是GameLevelAbstract的子类,实现了它的纯虚拟方法。我可以在我的源代码视图中看到该类是抽象的,并且立即知道它是或不是我正在寻找的
另一个例子是我的图形外观:
GraphicsFacade
OpenGLGraphics
DirectXGraphics
与上面的设置完全相同,只是它处理图形
我发现在寻找一个类时,在名称中使用设计模式是有用的,而且信息丰富。我确实认为有些东西不应该用在名称中,例如Singleton,但是Flyweight、Factory或Facade是我认为很适合用在实现这些模式的类名称中的设计名称的例子
我认为,如果你使用好的类名来帮助程序员一眼就能很好地掌握你的类所做的事情,这是一件好事
我不认为在大多数情况下,声明某种东西是数据结构或算法是一件好事。“LinkedListDataStructure”或“BubbleSortAlgorithm”不会增加程序员对类的理解,因为“LinkedList”在其功能中是显而易见的。至少有一个缺点:如果由于某种原因,类在重构后不使用该模式,您必须重命名它,否则类的名称错误。将设计模式名称添加为类名确实很好。这使得代码更容易理解。类名应该是有意义的,并且应该反映类的功能。当在类名中添加模式名时,会增加可读性,因为它还反映了用于设计类的技术。我更喜欢这种类型的类名。DownVorters:请提供一条评论,解释为什么在你进行DownVorts时你不同意答案。@Jon在这种情况下,我认为可以公平地假设DownVorters对把它放在名字里或根本不放在名字里感觉很强烈,在任何一种情况下,我不认为你能用这些信息做很多事情(除了长时间的讨论之外)解释他们对哪一个有强烈的感觉将是一个开始:)+1我也喜欢在抽象类的类名中加上“abstract”。标准的.NET命名约定是“MyClassBase”,但我更希望“AbstractMyClass”、“LinkedListDataStructure”或“BubbleSortAlgorithm”不会增加程序员的理解。我也完全同意这一点。类的名称是其接口的一部分,接口不应该像这样公布实现细节。。遗憾的是我不能+2你;)我不喜欢基类名称中的
Abstract
,因为当我看到X
是从Y
派生出来的,我认为X
是Y
的一种类型(例如,Dog
是Animal
的一种,而不是AbstractAnimal
)。虽然AbstractY
类型的变量是一个抽象引用,但它并不指向抽象的东西。同意,但设计模式会指示对象的行为。如果重构后对象的行为与远程不一样,那么它应该是一个新的类。。。