代码评审 为什么要代码评审?如果代码评审是要捕捉糟糕的代码,那么你如何知道你审查的代码是好的还是糟糕的? 我在找一些客观的方式来谈论代码的好坏属性。 糟糕的代码你可能会在代码审查中遇到以下这些糟糕的代码: Rigid-代码是否死板?它是否有强类型或参数以至于修改起来很困难? Fragil-代码是否脆弱?对代码做轻微的改变是否就会引起程序极大的破坏? Immobil-代码是否很难重构? Complx-代码是否过于复杂,是否过度设计? Vrbos-代码是否过于冗长而使用起来很费劲?当查阅代码是否很难看出来代码在做什么? 当你做代码审查的时候是否会很高兴看到这些词语? 当然不会。 好的设计如果有一些描述优秀的设计属性的方式就更好了,不仅仅是糟糕的设计,是否能在客观条件下做? SOLID(面向对象设计)在00年,RobrtMartin的AgilSoftwarDvlopmnt,Principls,Pattrns,andPractics书中提到了五个可重用软件设计的原则-"SOLID"(英文首字母缩略字): SinglRsponsibilityPrincipl-(单一功能原则) Opn/ClosdPrincipl-(开闭原则) LiskovSubstitutionPrincipl-(里氏替换原则) IntrfacSgrgationPrincipl-(接口隔离原则) DpndncyInvrsionPrincipl-(依赖反转原则) 这本书有点点过时,使用的语言也是十多年前的。但是,或许SOLID原则的某些方面可以给我们一个有关如何谈论一个精心设计的Go语言程序的线索。 )SinglRsponsibilityPrincipl(单一功能原则)Aclassshouldhavon,andonlyon,rasontochang.–RobrtCMartin (译注:名言就不翻译了,自己慢慢体会) 现在Go语言显然没有classss-相反,我们有更为强大的组合的概念-但是如果你可以看到过去class的使用,我认为这里有其价值。 为什么一段代码应该只有一个原因改变如此重要?当然,和你自己的代码要修改比较起来,发现自己代码所依赖的代码要修改会更令人头疼。而且,当你的代码不得不要修改的时候,它应该对直接的刺激有反应,而不应该是一个间接伤害的受害者。 所以,代码有单一功能原则从而有最少的原因来改变。 CouplingCohsion(耦合与内聚)这两个词语描绘了修改一段软件代码是何等的简单或困难。 Coupling-耦合是两个东西一起改变-一个移动会引发另一个移动。Cohsion-内聚是相关联但又隔离,一种相互吸引的力量。 在软件方面,内聚是形容代码段自然吸引到另一个的属性。 要描述Go语言的耦合与内聚,我们可以要谈论一下functions和mthods,当讨论单一功能原则时它们很常见,但是我相信它始于Go语言的packag模型。 Pakcag命名在Go语言中,所有的代码都在某个packag中。好的packag设计始于他的命名。packag名字不仅描述了它的目的而且还是一个命名空间的前缀。Go语言标准库里有一些好的例子: nt/北京白癜风医院哪里最好北京去哪里医院治疗白癜风最好
|