您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    如何处置前任顺序员留下的代码(3)
    时间:2017-10-30 12:21 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    这意味着,一个庞大、严密沟通的团队能够会生成一体化,严密耦合的代码,但一些较小的团队能够会生成更独立、松懈耦合的代码(有关此相关性的更多信息,请参阅《Demystifying Conway’s Law》)。关于我们来说,这意味着我们的通讯结构不只影响特定的代码段,也影响整个代码库。因此,与原作者亲密沟通相对是一个好办法,但我们应该自检不要太过于依赖于原作者。这不只能够会惹恼原作者,还能够在我们的代码中产生无看法的耦合。

    虽然这有助于我们深化研讨代码,但这是在假定可以接触原作者的状况下。在很多时分,原作者能够曾经分开了公司,或恰巧不在公司(例如正在休假)。在此种状况下我们该做什么?讯问能够对代码有所了解的人。这团体不一定要曾真正任务于代码,他可以是在原作者编写代码时就在周围,也可以是看法原作者。哪怕仅是从原开发者周围的人中失掉只言片语,也能够会启迪其他未知的代码片段。

    3.删除一切正告

    心思学中有一个众所周知的概念,称为“破窗实际”,Andrew Hunt和Dave Thomas在《 The Pragmatic Programmer 》(第4-6页)中详细描画了这个概念。这个实际最后是由James Q.Wilson和George L. Kelling提出的,描画如下:

    假定有一个修建物有几扇破了的窗户。假设窗户没有修好,那么破坏者会趋向于打破更多的窗户。最终,他们甚至能够会破门而入,假设修建物是没人住的,那么他们能够会合法占有或许在外面点火。也可以思索人行道的状况。假设路途下面有渣滓堆积,那么不久之后,就会有更多的渣滓累积。最终,人们甚至会末尾往那里扔外卖渣滓,甚至打破汽车。

    这个实际指出,假设似乎曾经没人关心这个物品或事物,那么我们就会无视对物品或事物的照顾,这是人的天分。例如,假设一栋修建物看上去曾经混乱不堪,那么它更有能够被肆意破坏。在软件方面,这个实际意味着假设开发人员发现代码曾经是一团糟,那么人的本性会让他弄坏代码。从本质上说,我们心里想的是(即使心思活动没有这么丰厚),“既然最后一团体不在乎这代码,我为什么要在乎?”或“都是乱糟糟的代码,谁知道是谁写的。”

    但是,这不应该成为我们的借口。只需我们接触以前属于其别人的代码,那么我们就要对这些代码担任,并且假设它不能有效任务的话,我们得担负结果。为了打败这种人的天分行为,我们需求采取一些小措施以避免我们的代码更少地被弄脏(及时改换破掉的窗户)。

    一个复杂办法是删除来自我们正在运用的整个包或模块中的一切正告。至于未运用或添加注释的代码,删除它。假设我们稍后需求这部分代码,那么在存储库中,我们总是可以从先前的提交中检索它。假设存在无法直接处置的正告(例如原始类型正告),那么运用@SuppressWarnings注解注释该调用或办法。这样可以确保我们对代码停止过细心的思索:它们不是由于疏忽而收回的正告,而是我们明白地留意到了正告(如原始类型)。

    一旦我们删除或明白地制止一切正告,那么我们就必须确保代码保持免除正告。这有两个主要作用:

    迫使我们细心思索我们创立的任何代码。

    增加代码糜烂的变化,如今的正告会招致以后的错误。

    这对其别人,以及我们本人都有心思暗示作用——我们其实关心我们正在处置的代码。它不再是条单行线——我们强逼着本人更改代码,提交,然后永不回头。相反,我们看法到我们需求对这代码担任。这对之后的软件开发也是有协助的——它向未来的开发人员展现,这不是一间窗户都破了的仓库:而是一个维护良好的代码库。

    4.重构

    在过去几十年中,重构曾经成为了一个十分重要的术语,并且最近被当作是对以后任务代码做任何改动的代名词。虽然重构确实触及对以后正在任务的代码的更改,但并非整个大局。Martin Fowler在他关于这个话题的重要着作——《Refactoring》一书中将重构定义为:

    对软件的外部结构停止更改,使其更容易了解并且修正起来更便宜,而不改动其可察看的行为。

    这个定义的关键在于它触及的更改不会改动系统可察看的行为。这意味着当我们重构代码时,我们必需要有办法来确保代码的外部可见行为不会改动。在我们的例子中,这意味着是在我们承袭或本人开发的测试套件中。为了确保我们没有改动系统的外部行为,每当我们停止改动时,都必须重新编译和执行我们的全部测试。

    此外,并不是我们所做的每一个改动都被以为是重构。例如,重命名办法以更好地反映其预期用途是重构,但添加新功用不是。为了看到重构的益处,我们将重构SuccessfulFilter。执行的第一个重构是提取办法,以更好地封装团体净工资的逻辑:

    public class SuccessfulFilter implements Predicate<Person> { 

        @Override 

        public boolean test(Person person) { 

            return person.getAge() < 30 && getNetSalary(person) > 60000; 

        } 

        private double getNetSalary(Person person) { 

            return (((person.getSalary() - (250 * 12)) - 1500) * 0.94); 

        } 

    (责任编辑:admin)