Loading...
墨滴

可爱猪猪

2021/08/25  阅读:24  主题:兰青

做好这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,我们下篇文章见~

可爱猪猪

2021/08/25  阅读:24  主题:兰青

作者介绍

可爱猪猪