美文网首页
代码的味道--烟熏鲱鱼4

代码的味道--烟熏鲱鱼4

作者: whyreal | 来源:发表于2016-07-25 16:54 被阅读13次

烟熏鲱鱼(臭臭)

指那些已经被添加了太多属性或者方法的,难以维护的的函数或类。通常这种情况不是突然出现的,而是随着代码进化而不断积累,特别是在没有人专门维护代码的时候。

超长参数列表

原文链接

症状

方法的参数超过3到4个

原因

多个算法被合并到一个方法之后,往往会产生参数列表过长的问题。这些参数通常用来决定使用哪种算法,以及这种算法如何执行。

超长的参数列表可能会使类之间的耦合变得越来越紧。比如,一个方法中创建某个对象的代码,从这个方法中被迁移到方法的调用者中,然后调用者将创建好的对象作为参数传递给原来的方法。这导致原方法不知道对象之间的关系,同时降低了耦合度。但是,如果这样的情况比较多的话,那么参数列表必然会膨胀。

当参数列表不断膨胀的时候,方法变得难于使用,难于理解。对象可以使用自身的数据,来代替参数的传递,如果自身数据无法满足需求的时候再通过参数传递。

解决办法

在调用方法之前,通过其他对象的方法获得数据,这些将作为方法调用的参数。问题是这些数据可以通过对象的方法获得

int basePrice = quantity * itemPrice;
double seasonDiscount = store.getSeasonalDiscount();
double fees = store.getFees();
double finalPrice = discountedPrice(basePrice, seasonDiscount, fees);

直接将对象作为参数传递,而不是传递对象中某些方法的结果。

int basePrice = quantity * itemPrice;
double finalPrice = discountedPrice(basePrice, store);

你经常从同一个对象中获取数据,然后传递给某个方法

int low = daysTempRange().getLow();
int high = daysTempRange().getHigh();
boolean withinPlan = plan.withinRange(low, high);

以传递整个对象的的方式替代之前的方式

boolean withinPlan = plan.withinRange(daysTempRange());

多个方法接受相同的一组参数


imageimage

使用这些参数构建新的对象


imageimage

收益

  • 更可读的代码、更短的代码
  • 可以发现之前没有注意到的重复的代码

相关文章

  • 代码的味道--烟熏鲱鱼4

    烟熏鲱鱼(臭臭) 指那些已经被添加了太多属性或者方法的,难以维护的的函数或类。通常这种情况不是突然出现的,而是随着...

  • 代码的味道--烟熏鲱鱼2

    烟熏鲱鱼(臭臭) 指那些已经被添加了太多属性或者方法的,难以维护的的函数或类。通常这种情况不是突然出现的,而是随着...

  • 代码的味道--烟熏鲱鱼1

    烟熏鲱鱼(臭臭) 指那些已经被添加了太多属性或者方法的,难以维护的的函数或类。通常这种情况不是突然出现的,而是随着...

  • 代码的味道--烟熏鲱鱼3

    烟熏鲱鱼(臭臭) 指那些已经被添加了太多属性或者方法的,难以维护的的函数或类。通常这种情况不是突然出现的,而是随着...

  • 代码的味道--烟熏鲱鱼5

    烟熏鲱鱼(臭臭) 指那些已经被添加了太多属性或者方法的,难以维护的的函数或类。通常这种情况不是突然出现的,而是随着...

  • 红鲱鱼,诱饵,反本能的挣扎

    文丨浩然 红鲱鱼是一种腌制或者烟熏的食用鱼。普通鲱鱼不是红色,但进过腌制、烟熏之后就变成了红色,而且散发出刺鼻的味...

  • 朋友,你吃过鲱鱼罐头吗?

    【嘟嘟餐饮观察】 ★温馨提示:这是一篇有味道的文章! 朋友,你吃过鲱鱼罐头吗? 一说到鲱鱼罐头,大多数人应该是好奇...

  • 4.鲱鱼奇观

    月亮每月的循环以及它对潮汐的影响,引发一连串的海洋生态事件,但是还有一个更长的节奏,带给一切事物最深远的影响,那就...

  • 人间烟火

    什么是熟悉的味道? 饭菜香? 不,柴火的味道,烟熏火燎中的年味,才是熟悉的味道,等待了一年...

  • 儿时的年味

    年,是鞭炮燃烧的味道,是枣花馒头出笼的味道,是年糕甜甜的味道,是母亲烧火被烟熏的眯起眼睛的味道,是柴火燃烧时...

网友评论

      本文标题:代码的味道--烟熏鲱鱼4

      本文链接:https://www.haomeiwen.com/subject/ktagjttx.html