标签:factor 项目 支付 简单 数字 魔术 switch make 命名
整洁的代码能够提高项目的可读性、可维护性、可扩展性,这二天大致看了一本书代码整洁之道,粗略的看了一遍,总结了一下,写下来作为以后做项目的时候的参考。
代码的整洁简单的总结二种分类:
1.命名
?有意义命名
说明:变量、函数、类的命名应该答复了所有的大问题,应该告诉你他为什么会存在,他做什么事情,应该怎么用。如果命名需要注释来补充,就不是好的命名。长名称胜于短名称。
?变量前缀尽量不要有
说明:人们读代码的时候会无视前缀(或后缀),只看名称中有意义的部分。例如:m_name 这个名称m前缀无任何意义,单价看到也不知道什么意思。
?类名尽量用名词,而方法名要用动词。
?用命名常量替代魔术数字
2.类和函数
. 函数尽量短小、类尽量少、函数尽量少。
函数20行封顶最佳
. 函数只做一件事情
下面我们看一下二个代码例子来做个比较
例1:
Public Money calculatePay(Employee e){
Switch(e.type){
Case COMMISSIONED
Return calculateCommissionedpay(e);
Case Hourly:
Return calculateHourlyPay(e);
}
}
例2:
Public abstract class Employee{ Public abstract Boolean isPayday(); Public abstract Money calculatePay(); Public abstract void deliverPay(Money pay); } Public interface EmployeeFactory{ Public Employee makeEmployee(EmployeeRecord r); } Public class EmployeeFactoryImpl implements mployeeFactory{ Public Employee makeEmployee(EmployeeRecord r){ Switch(r.type){ Case COMMISSIONED Return new CommissionedEmployee(r); Case Hourly: Return new HourlyEmployee(r); } } }
例2显然比例1更好,
例1:一个函数中做了二件事情,可扩展性不好。如果e.type增加了一种雇员类型的话,是不是需要进行修改代码,增加一个计算方法进行计算支付金额。
例2:通过该函数,生成一个雇员,在通过雇员对象来得到应该付给该雇员金额,如果需要增加其他类型雇员,那么只用扩展程序,扩展一个新类型的雇员继承Employee就可以了, 面向对象编程对修改关闭对扩展开发。
. 函数参数数量尽量少
描述:最理想的是零参数,其次是一个参数,再次是二个,尽量避免三个以上参数。
. 无副作用
函数承诺只做一件事情,但是还是会做其他隐藏起来的事情,这样会导致古怪的时序性耦合及顺序依赖。
例如:在检查用户有效性的函数中存在清空session函数的调用。当某个误信函数名称的调用者调用该函数就有清空session的风险。这就造成了耦合性,也就是说次函数只有在特定的情况下才能调用。
如果非要存在这种情况就要在函数名中描述出来,避免时序性错误。
. 不写重复代码
有个算法出现4次重复,这4次重复与其他代码混淆在一起,而且完全不一样。这样的重复会导致问题,造成代码的臃肿,而且算法改变需要修改4处代码。
. 常量vs枚举
尽量用枚举,因为它们隶属于有名称的枚举。
标签:factor 项目 支付 简单 数字 魔术 switch make 命名
原文地址:http://www.cnblogs.com/gxz-sw/p/6646769.html