10年经验总结做好这5步,写出让自己都羡慕的简约代码?

一本改善代码质量的书—马丁·福勒《重构-改善既有代码的设计》最近让我有点着迷。职业生涯10年有余,形形色色的项目也算见识不少。 其实写好代码并不难,多注意一些细节,下面结合我的项目经验和大家谈谈如何写出美观并且简约代码?

「文章目录」

  • 入口方法要清晰明了

  • 良好的段落分层和注释

  • 提炼函数

  • 约定俗称的返回值命名

  • 魔数值替换

  • 写在最后

1.入口方法要清晰明了

方法的入口往往是业务逻辑实现的大门。比如从Controller层到Service层,Service层第一个方法往往是业务实现的入口。很多人喜欢一个service方法写完所有的逻辑。可以这样改造:

##xxxServiceImpl
public void saveOrder(Order order){
   // 校验订单对象是否合法
   checkOrder(order);  
   
   // 计算订单总金额
   int totalAmonut = sumAmountOrder(order);
   order.setTotalAmount(totalAmount);
   
   // 保存订单
   saveOrder(order);

}

从方法的入口上,能够很清楚的看出看出service方法的实现思路,就像ppt或者文章的目录一样。

2.良好的段落分层和注释

你已经看出了上述代码的风格了吧?每段独立的逻辑之间都是有一个空行分隔,并且每段逻辑上边有一行注释,就像段落的中心思想一样。让阅读者即使不懂代码也能够快速获取到代码逻辑。

3.提炼函数

方法的入口能够清晰明了展示实现逻辑得益于,我们对业务逻辑提炼了函数。不过提炼函数我们要注意这几个原则:

「给它一个与之匹配的方法名」
千万不要随意、随性给方法命名,否则方法名很容易让人误导,导致方法被错误的引用。

「遵循单一职责原则」
一个方法只干一件事情并与定义的方法名称100%贴切,并不可为了代码编写方便,将毫不相干的逻辑封装进去,这样会破坏方法的复用能力。

「给函数合理的入参」
有的时候为了少写一个参数类,可能将原始的dto直接带入并且作为底层的方法的参数,无关的参数引入方法中同样也会降低方法的复用性,你试想,如果参数设置不合理,压根自己都不想再次调用。

「提炼的方法应放到对应的类域」
不知道有没有发现你的项目里入口的service类非常臃肿,为什么呢?大家喜欢提炼方法已经做好了第一步,可是不管什么样的方法都放到入口service类的局部方法。而正确的做法应该将提炼的方法放到它与之匹配的类里,如果没有,那么就去新建一个吧。

「提升函数的通用性及复用性」
我们尽量让让函数逻辑单一、颗粒度尽量小,提升函数的通用性。然而复用性并代表通用性。提升复用性,应从方法的可扩展性入手,比如可以为方法设置更灵活的参数甚至更合理的返回值。比如格式化时间方法,可以将format格式作为入参。

4.约定俗称的返回值命名

重构这本书中也提到,如果项目中返回值的命名都有统一的风格和命名方式,能够从很长的代码中快速看到返回值是哪个变量,比如命名为result,虽然开发工具可以高亮某个变量,不过统一规范,能够进一步提升编码质量与可读性。

5.魔数值替换

可能你第一次听说"魔数"这个概念,可你对它并不陌生,因为代码里面各种形形色色的魔数,比如代码中:

if(type == 1){
  // 执行逻辑
}

代码中1就是魔数,魔数并不能清晰的标识准确的含义,可以用以下几种方式替换:

  1. 使用枚举类替换

  2. 项目中统一的全局静态常量

  3. 类内部的统一的全局静态常量

当然,可根据魔数类型作出对应的选择。

6.变量内联

变量内联概念你没听所过,品一下这段代码:

// 计算订单价格
double price = calcPrice(order);
...
print(price);

代码中多定义了一个局部变量price,内联后可以节约一行代码:

// 计算订单价格并打印
print(calcPrice(order));

写在最后

一个发自程序员的倡议:做代码的保洁员,不乱丢垃圾!

我是公众号「面试怪圈」的Yesterday,我们下篇文章见~

面试怪圈是一个免费的覆盖java基础,互联网面试题,Jvm,架构,中间件,数据库,缓存服务,并发编程,设计模式,算法,网络,操作系统的大型综合资源网站,包含:Java基础,Mysql调优,架构设计,项目实战,Redis缓存,Python,Spring等技术资料

资料免费下载

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值