龙空技术网

java 如何写好一个方法

北漂Leo 108

前言:

而今我们对“金字塔java”大概比较重视,我们都需要分析一些“金字塔java”的相关知识。那么小编也在网上收集了一些关于“金字塔java””的相关资讯,希望大家能喜欢,同学们快快来了解一下吧!

检验一个好方法的标准就是:可读性、可维护性、可复用性。

单一职责:一个方法只干一件事情,即不要把逻辑一样,主义不同的放在一个方法里。如检查用户名、检查密码,这两个方法从逻辑上看一样,但从语义上是完全不同的,所以应该写两个方法。

KISS原则: 解释是尽量保持代码简单,主要提升方法的可读性和可维护性,那么如何理解简单呢?并不是说代码少,而是逻辑清晰。其实在满足当前业务场景下,解决问题的方法越简单,反而更能体现一个人的代码能力,引用《重构》一句经典的话来说就是:"任何一个傻瓜都能写出计算机可以理解的程序,只有写出人类容易理解的程序才是优秀的程序员。"

DRY原则(Don’t Repeat Yourself ):不要写重复的代码,表现中实现逻辑重复、功能语义重复、代码执行重复三方面。逻辑重复如:checkUserName1、checkUserName2

功能语义不同的一定不能写到一个方法里。如checkUserNameAndPwd这就有问题了。不符合单一职责。

代码执行重复:主要表现为一次调用,多次执行目的相同的代码。

public class UserService{    @Autowired    private UserManager userManager;     public ServiceResult<User> getUserById(long userId){         boolean existed = userManager.checkUserExisted(userId);         if(!existed){             ServiceResult.getFailureResult("code","msg");         }          User user = userManager.getUserById(userId);          return ServiceResult.getSuccessResult(user);      }}  public static class UserManager {      public User getUserById(long userId){          boolean existed = userManager.checkUserExisted(userId);          if(!existed){            // 抛异常        }        return 查询数据库结果;    }      public boolean checkUserExisted(long userId){        return 根据一定规则校验的结果    }       }

上面这段代码,分别两次的去调用了 “checkUserExisted”方法,导致了执行重复,违反了DRY原则。一般对于执行重复,可以调整代码顺序,统一规范来避免这个问题。比如说对于业务校验,我们可以放在Manager层统一处理。

避免执行重复,可以有效提升方法性能。特别是对于数据库和RPC这类I/O 操作是比较耗时的,我们在写代码的时候, 应当尽量减少这类 I/O 操作。

移除过深的嵌套层次

如果代码 if 嵌套者for 、for 嵌套着 if,不知道大家读着什么感受,可能才看到就开始头晕了。嵌套过深的代码一眼看去,高情商说他在叠一座金字塔,低情商说看不出来堆的什么,非常影响易读性。如果嵌套过深,可以尝试下面的解法:

1.利用 return,continue 等关键字

2.去除多余的if-else

3.抽出部分嵌套逻辑,封装为方法

4.使用策略+工厂等设计模式等

定义变量不宜过早

在方法开始时,一开始就把所以变量定义好,然后在几十行后在使用,阅读者在阅读这种风格的代码时,一开始不知道这个参数干嘛用,到后面不知道这个参数怎么定义的,还要上下滚动屏幕,大大降低了易读性,定义变量的时候,最好在需要它的前一行定义好,上下文之间联系一目了然。

标签: #金字塔java