冗余代码向来是代码的一种坏味道,也是我们程序员要极力避免的。今天我通过一个示例和大家分享下解决冗余代码的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。,如果是你,你会选择哪种方式呢?还是有更好的方法?,
文章版权声明
1 原创文章作者:cmcc,如若转载,请注明出处: https://www.52hwl.com/22389.html
2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈
3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)
4 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别