从早期面向过程的编程到目前面向对象的编程,永恒的还是方法,面向过程的编程称为函数,实际上,面向对象的静态方法也基本等同于函数;也就是说无论何种编程语言,方法是软件的核心;面向对象的进步在于将方法(行为)和属性进行封装,使行为和属性以类的形式组织起来,能够更好地表达应用领域;事实上,软件系统就是对应用领域的抽象表达,你的表达方式与接近客观领域,你的表达力就会越强,表达就会越简洁,越易于理解。
方法是对行为细节的表述,方法有机地组织起来、协同工作形成一个软件系统,尽管我们非常强调数据结构、类体系结构,它们的确在系统中至关重要,但这些仅构成系统的骨架和躯干,方法才是这个系统的灵魂,方法是系统具有了活力和生命。既然方法如此重要,那么我们在设计方法时应该遵循哪些原则呢?
4.1 起个好名
名字的重要性我们在前面已经描述过来,方法的名称要能够恰当地描述它做的事,后面我们会介绍方法要功能单一,这样的方法也比较容易起一个简洁响亮的名称,当你一时找不到一个简洁的好名时,可以起一个通俗一点、贴切的长名,这也比令人费解的短名要好很多,当有更恰当的名字时,及时重构,多花些时间起个恰当名称是非常值得的,追求一个好名能帮助你改进设计,通常你很难为你的方法起恰当的名称时,往往说明该方法的职责不清,需要拆分和从新设计。
4.2 只做一件事、做好一件事
这一点非常重要,一个方法一定要专注地只做一件事、做好一件事,只做一件事是强调方法不要做与其职责无关的事(不要替别人做事,软件系统不需要雷锋),做好一件事,是强点方法必选负责把这件事全面、完善地处理好(不要本该自己做的事推给别人,软件系统不喜欢推诿),例如输入数据的合法性检查、各种错误及异常的处理、处理后数据的合法性检查等。
4.3 方法体内的逻辑在同一个抽象层次上
这是一个非常重要的概念和方法设计指导原则,希望我们一定要弄懂它的含义并遵照执行,我们大多数人在设计和编写方法是违背该原则,从而造成方法混乱、层次不清,即不利于阅读也不利于维护。为了让大家搞清楚这个原则的含义,下面举例说明:
我们以客户到银行取现金的后台处理程序为例,这个例子是一个经过高度简化的示意程序,实际的程序要比这细致的多。首先给出一个违背此规则的取款算法,该方法试图将全部取款的业务处理逻辑包含在一个过程中(有些程序员甚至认为这样写代码能够一气呵成,是一