任务6:清理

玩到最后,这是最后的一个任务了。我们剩下最后的一条戒律:“一行代码只有一个“.”运算符(One dot per line)”。它讲的,其实是重构里提到的一种坏味道:“过长的消息链”(Message Chain)。

违反该诫条的代码常常表现出这样的形状:object.b1().b2().b3()或者user.getDepartment().getManager().getLastName(),也即对象需要同时与另外多个对象交互,这破坏了封装性,让类知道了其不应该知道的细节,破坏了“迪米特法则”。

迪米特法则的通俗解释:你可以玩自己的玩具,可以玩你制造的玩具,还要别人送给你的玩具,但是永远不要碰别人的玩具。

你的任务

  1. 重构一行存在多个“.”运算符的代码,使之符合“一行代码只有一个.运算符(One dot per line)”原则

  2. 你觉得代码还可以重构的其他地方

  3. 玩一下README里面部分还没实现的需求

思考

  • 有没有继续做到重构过程随时保持行为?

  • 将代码重构到面向对象的过程能否感知到明显的价值?

  • 做了这么多重构,你觉得好的代码具备什么样的特征?

参考

  • 《重构 2》3.17 过长的消息链(Message Chains)

Last updated