解决冗余代码的三种方法,让你的代码更上一层楼

网站建设3年前发布
13 0 0

冗余代码向来是代码的一种坏味道,也是我们程序员要极力避免的。今天我通过一个示例和大家分享下解决冗余代码的3个手段,看看哪个最好。,为了描述这个问题,我将使用 FtpClient 作为示例。要从 ftp 服务器获取一些文件,你需要先建立连接,下一步是登录,然后执行查看ftp文件列表、删除ftp文件,最后注销并断开连接, 代码如下:,正如上面代码所示,listDirectories和downloadFtpFile​中都包含了ftp连接、登录以及最后的注销操作,存在大量冗余的代码,那有什么更好的办法清理冗余代码呢?下面推荐3个做法,所有三个提出的解决方案都将实现以下 FtpProvider 接口,我将比较这些实现并选择更好的一个。,所有用@FtpOperation​ 注解的方法都会在这个地方执行joinPoint.proceed()。,我们正在 FtpOperationTemplate​ 上执行方法 execute​ 并且我们正在传递 lambda​ 表达式。我们将放入 lambda​ 中的所有逻辑都将代替 ftpOperation.apply(ftpClient) 函数执行。,我们正在 FtpOperationTemplate​ 上执行方法 execute​ 并在那里传递我们的参数。因此执行方法的逻辑对于 FtpOperationTemplate 的每个实现都是不同的。,我们现在来比较下上面种方式:,向 FtpProvider​ 接口添加一个新方法,需要我们仅在一个地方进行更改。我们可以轻松地将我们的 FtpProvider​ 注入到其他服务中。此解决方案的强项可能是 @FtpOperation​ 注释,它可以在 FtpProvider 上下文实现之外使用,但是将 Ftp 操作的逻辑划分到单独的类中并不是一个好方法。,向接口 FtpProvider​ 添加一个新方法,需要我们仅在一个地方进行更改。我们可以轻松地将我们的 FtpProvider 注入到其他服务中。我们将ftp操作的逻辑封装在一个类中。相对于上面的方式,我们也没有用到AOP的库,所以我个人还是比较推荐的。,向接口 FtpProvider​ 添加一个新方法,需要我们在两个地方进行更改。我们需要添加一个新的类,会导致类爆炸,另外,我们还需要将实现注入到 FtpProvider。,如果是你,你会选择哪种方式呢?还是有更好的方法?,

© 版权声明

相关文章