code-smell-5-较长的参数列表

在我们早期的编程时代,我们被教授说任何我们需要的东西都按照常规的通过参数传入。这一点是可以理解的,因为另一种方式就是全局数据,全局数据被成为魔鬼并且使用起来也有很多痛点。面向对象改变了这个局面,因为如果你没有一些你需要的东西,你总是可以要求别的对象提供给你。因此有了对象,你不需要传入这个方法需要的所有东西了;取而代之的是你传入了足够的东西,这个方法可以拿到任何它需要的。一个方法所需要的很多东西都是可以在其宿主的类中可以得到的。在面向对象编程中,参数列表趋向于比传统的编程中短小很多。


这样子其实很好,因为太长的参数列表是不易于理解的,因为它们变得不一致且难于使用,还有因为你需要更多的数据从而永远不会去改变它们。大多数的改变会通过传对象来移除,因为你大多数时候更可能会需要仅仅几个请求就得到一块儿新的数据。


当你可以通过传入一个参数,由一个你已知的对象发请求来得到你想要的数据的时候,可以使用Replace Parameter with Method.这个对象一定是一个属性或者另一个参数。使用Preserve Whole Object来拿到从一个对象收集的一堆数据然后用这个对象替换它。如果你有好几个数据条目但是没有逻辑上的一个对象,那么使用Introduce Parameter Object。


当你在做这些修改的时候有一个非常重要的问题。这发生在当你明确的不想在被调用对象和这个更大的对象之间创建依赖的时候。在这种情况下解开数据并分别以参数的方式传入是有道理的,但是要注意这样引入的痛点。当参数列表太长或者改变太频繁的时候,你就需要重新思考你的依赖结构了。


原文链接:https://sourcemaking.com/refactoring/long-parameter-list

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值