美文网首页
俊超说 | DRY,不要重复你自己

俊超说 | DRY,不要重复你自己

作者: AI_李俊超 | 来源:发表于2019-08-28 08:24 被阅读0次

    系统中的每一项知识都必须具有单一、无歧义、权威的表示。

                                                   --- DRY原则


    黑牛和白牛有一天,一位记者来到了一块牧场,看见了一位农夫在喂牛。记者便上去搭讪道:“请问您每天给你的牛喂些什么呢?” 农夫说:“你问的是黑牛还是白牛?” 
    记者:“黑牛”
    农夫:“玉米和小麦” 
    记者:“那白牛呢?” 
    农夫:“玉米和小麦” 
    记者有点迷糊了... 记者又问:“您每天给它们喂多少斤啊?” 
    农夫:“你问的是黑牛还是白牛?” 
    记者:“黑牛” 
    农夫:“5斤”
    记者:“那白牛呢?” 
    农夫:“5斤”
    记者有点不耐烦,便质疑的问道:“为什么同样的答案你却偏偏要让问我两次?” 
    农夫淡淡地说道:“因为黑牛是我的” 
    记者:“那白牛呢?”
    农夫:“也是我的”

    《伏尔加河上的纤夫》 俄国批判现实主义画家 伊里亚·叶菲莫维奇·列宾 1870年-1873年

    本期“黑牛和白牛”的故事做启发,一起聊聊软件工程中重复的问题。无论你承不承认,在你所在的项目中也或多或少存在重复的痕迹。作为程序员,我们每天都在不停的进行着项目功能开发迭代,这个过程中伴随着环境的变化,也需要对原有的逻辑进行维护或增强特性。

    当我们维护时,我们不得不找到并改变应用中的知识表示-那些嵌在系统中的代码逻辑块。问题是,在我们开发的规范、过程和程序中很容易重复表述知识。这个时候就是我们之前说的“破窗”,也就是重复的开始。
     那么重复是怎么发生的呢?我们列举以下几点和相关建议:1. 强加的重复(imposed duplication)。    这种情况往往是系统中我们没有更好的选择-环境似乎要求重复。
        a.重复的代码结构:可以使用过滤器或者代码生成器,减少重复的工作内容。
        b.代码中的文档:要把低级的知识放在代码中,它属于那里。把注释保留给高级的说明。
        c.文档与代码:考虑使用工具,同步代码和文档的同步。如接口文档工具swagger。2. 无意的重复(imnadvertent duplication)。    那些我们在开发中没有意识到的重复信息。    可能是在无意的设计中造成的。比如经常会要用缓存的方式来避免一些繁琐的操作时。这时候要我们要做的是使影响局部化,不要把重复暴露给外界。
    3. 无耐性的重复(impatient duplication)。    ctrl+V,ctrl+C. 这个熟悉的操作,这样的开发节奏似乎更快些。    每个项目都有时间压力,这也是我们走捷径的内在驱动。相同逻辑的代码拷贝后做些改动。然后跑通逻辑。搞定!(这样真的可以吗?)。有时候“欲速则不达”,这个时候需要把一些细节明确,以避免一个小小的失误然后回来在找bug用多半个小时。
    4. 开发者之间的重复(interdveloper duplication)。    同一团队或者不同团队中开发的时候重复了相同的信息,功能模块,方法或逻辑等。    最不好察觉和维护的重复就是开发者之间的重复。这个重复是从整个功能开始的,会给后期维护或者升级带来较大的难度。

    那“知其所以然”后,我们能有哪些避免重复的方法呢?

    1. 定期进行代码review。 把公用类和方法定期优化同步 ,减少重复造轮子。

    2. 团队协作之间主动交流。对已经有类似的方法先考虑是否可以重用。

    3. 沉淀公共知识的统一管理和同步。比如像之前我在启明星辰做的通用知识文档。

    简而言之,目标就是“在系统中避免重复造轮子,让复用变得容易”。

    草莓时刻:

    1. 在你所在的团队项目代码中,找下存在哪种重复的情况并试着做点改变。

    2. 和团队中的小伙伴相互代码review.(开放心态目的是学习和成长)。

    俊超说,每天说点程序员的事。

    欢迎留言交流。

    相关文章

      网友评论

          本文标题:俊超说 | DRY,不要重复你自己

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