编程中的命名设计那点事

简介:

在我开始设计系统的时候,我会花去很多时间去设计命名,因为好的命名和好的设计是分不开的。

In the beginning was the Word, and the Word was with God, and the Word was God
太初有道。道与神同在,道就是神。 (约翰福音第一章,第一节)

在设计过程中给类,方法和函数好的命名会带来好的设计,虽然这不是一定成立,但是如果坏的命名那一定不会给你带来好的设计。在设计过程,如果你发现你很难命名某一个模块,某个方法时,可能你真正遇到的问题不是难命名的问题,而是这个设计是否真的合理,你或许应该花更多的时间来重新设计一下你的模块。

好的命名不仅会带来好的设计,好的命名还提高了程序的可读性,降低代码维护的成本。另一方面,如果糟糕的命名会给代码带来一堵无形的墙,让你必须深入代码去研究代码具有的行为,增加你理解代码的时间。

为此我总结了几条关于命名的指导原则,希望这几条原则能为你的命名设计带来帮助,我使用的是C++的语法,当然这些原则也很容易扩展到其他语言中去。

类型命名(类,接口,和结构)


名字应该尽量采用名词
Bad:           Happy
Good:          Happiness

不要使用类似名字空间的前缀
Bad:           SystemOnlineMessage
Good:          System::Online:Message

形容词不要用太多,能描述清楚就行
Bad:           IAbstractFactoryPatternBase
Good:          IFactory

在类型中不要使用Manager 或则 Helper 或则其他没意义的单词
如果你一定要在一个类型上加上Manager或Helper,那么这个类型要么就是命名的非常糟糕,要么就是设计的非常糟糕,如果是后则,那么这个类型就应该管理manage和帮助help一下自己了。
Bad:           ConnectionManager
               XmlHelper
Good:          Connection
               XmlDocument, XmlNode, etc.

如果某个类不能通过简单的命名来描述它具有的功能,可以考虑用类比的方式来命名
Bad:           IncomingMessageQueue
               CharacterArray
               SpatialOrganizer
Good:          Mailbox
               String
               Map

如果你使用类比,你就应该一致的使用它们
Bad:           Mailbox,DestinationID
Good:          Mailbox,Address

函数(方法和过程)


简洁
Bad:           list.GetNumberOfItems()
Good:          list.Count()

不要太简洁
Bad:           list.Verify()
Good:          list.ContainsNull()

避免缩写
Bad:           list.Srt()
Good:          list.Sort()

对于完成某件事情的函数使用动词
Bad:           obj.RefCount();
Good:          list.Clear();
               list.Sort();
               obj.AddReference();

对于返回布尔型的函数,使用类似提问的方式
Bad:           list.Empty();
Good:          list.IsEmpty();
               list.Contains(item);

对于只是返回属性,而不改变状态的函数则使用名词
Bad:           list.GetCount();
Good:          list.Count();

不要在函数名字中重复参数的名称
Bad:           list.AddItem(item);
               handler.ReceiveMessage(msg);
Good:          list.Add(item);
               handler.Receive(msg);

不要方法的名字中重复此方法的类的名称
Bad:           list.AddToList(item);
Good:          list.Add(item);

不要在函数的名字中加入返回类型,除非函数名必须以返回类型进行区别
Bad:           list.GetCountInt();
Good:          list.GetCount();
               message.GetIntValue();
               message.GetFloatValue();

不要名字中使用And 或则 Or
如果你使用一个连接词来连接函数名,那么这个函数肯定是做了太多的事情,更好的做法是将其分成更小的函数来处理(类似面向对象设计准则中的责任单一原则)。
如果你想确保是这是一个原子的操作,那么你应该用一个名字来描述这个操作或一个类来封装他
Bad:           mail.VerifyAddressAndSendStatus();
Good:          mail.VerifyAddress();
               mail.SendStatus();                                                                                                                                                                                                                                                                                                                                                                                                                                                                          本文转自 昊洋教育 51CTO博客,原文链接:xxxxhttp://blog.51cto.com/zdytesting/1763047xxx,如需转载请自行联系原作者

相关文章
|
6月前
|
设计模式 微服务
设计模式问题之在软件设计中,“模块”如何定义和区分
设计模式问题之在软件设计中,“模块”如何定义和区分
|
9月前
|
存储 缓存 算法
代码简洁之道:我们该如何规范代码的命名?
代码简洁之道:我们该如何规范代码的命名?
149 1
编程基本功:典型的柳氏风格命名一例
编程基本功:典型的柳氏风格命名一例
92 0
编程基本功:典型的柳氏风格命名一例
|
IDE 程序员 开发工具
世界上第一个程序员命名的编程语言是什么?
Ada曾是美国国防部指定的唯一一款可用于军用系统开发的语言,旨在整合美军事系统中运行着450多种不同的程序设计语言,她是迄今为止最复杂、最完备的软件工具。开发始于1975年,最早是针对嵌入式和实时系统设计的,1983年发布。其命名是为了纪念世界上第一位程序员阿达·洛芙莱斯。Ada具有许多现代软件的开发原理,而且将这些原理进行实现他可以改善软件系统的清晰性、可靠性、有效性、可维护性。
454 0
|
消息中间件 SQL 缓存
程序命名的原则与重构
命名是对事物本质的一种认知探索,是给读者一份宝贵的承诺。糟糕的命名会像迷雾,引领读者走进深渊;而好的命名会像灯塔,照亮读者前进的路。命名如此美妙,本文将一步步揭开它的神秘面纱!
程序命名的原则与重构
|
数据采集 负载均衡 搜索推荐
会计学包含的两种程序设计思想
会计学包含的两种程序设计思想
会计学包含的两种程序设计思想
|
测试技术 开发者
【软件测试基础理论】看到同事变量用abc命名,我上去就是一jue (非功能-可维护性)
【软件测试基础理论】看到同事变量用abc命名,我上去就是一jue (非功能-可维护性)
|
设计模式 Java 关系型数据库
阿里Java编程规约【一】命名风格
1. 【强制】所有编程相关的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。 反例:_name / __name / $Object / name_ / name$ / Object$ 2. 【强制】所有编程相关的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
426 0
|
自然语言处理 Python 索引
2018-07-19 在代码中进行中文命名(类/变量/方法等)的优势
相比英文命名, 一些中文命名的优势. Some advantages with Chinese naming compared to English naming.
808 0