追求代码质量 - 顺服复杂的冗长代码[Java编程]
本文“追求代码质量 - 顺服复杂的冗长代码[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
我毫不惭愧地承认,在看到复杂的代码块时,我也会感到惊骇和心里发毛.事实上,我敢说您在碰到大量办法和乱七八糟到处蔓延的类时,也会 有些心里 发毛的.不能说在这些情形下追求退路的人不是完人,这只是优异开辟人员的一 种本能.过于复杂的代码难以测试和保护,这普通还意味着更高的出错率.
我在 本系列前面的文章 中已经注释了圈复杂性,它是令人讨厌的代码的一 种先兆.具有高圈复杂度值的测试办法几近老是把事情弄得一团糟,无法简单收 场.上一个月,我向您展示了若何利用 Extract Method 情势重构您的代码,从 而将您带出迷宫.降低办法的复杂度可以使代码更易于测试和保护,如图 1 所 示:
图 1. 降低复杂度可以使代码更易于保护和测试
不过,圈复杂性并非肯定高风险代码的惟一复杂性器量.您还可以操纵类 长度、办法长度和内部类耦合.这些器量之间存在着扑朔迷离的关联,但是很容 易发现这些关联.这个月,我将注释它们为什么那么重要,以及若何利用 PMD 和 JavaNCSS 跟踪它们.
代码太多了!
理解简单代码和流利代码之间的辨别非常重要.简单代码没必要过度简单或易 于编写,只需易于理解 便可.您可以利用 C++ 编写简单代码,就像利用 Visual Basic 编写它们那样.不过,用任何语言反简化 代码的最快方法都是一 次编写大量的代码.
考虑一下若何将此法则利用于办法和类.大大都人对记着信誉卡号感到头疼 的一个简单缘由是,我们一次只能管理 7(±2) 片数据.理解了这一点,就会明 白过量的条件会赐与后带来麻烦,使测试和保护变得很艰难.相同的原理也可以 利用于逻辑块.
全部给定代码主体普通包含已分组的语句,它们拥有共同的目标,比方成立 一个调集,将数据项增添到该调集合.但是,在一个长办法(long method)中 分组数目众多的逻辑块大概会让人很快忘掉该办法的总体企图,因为很少有人可 以有效处理这样一个大的数据集.恰好是这个缺陷带来了代码基中的保护问题.冗长的办法是缺陷的避风港,因为很少有人可以有效地解析它们.长办法不但完 成太多的工作,也需求人们费很大的劲去理解!
就像长办法会让开辟人 员讨厌一样,长类(long class)也会令开辟人员讨厌.相同的谈论也可以利用 于总体代码,冗长的类大概会做太多的工作,并承当太多的责任.
什么 样才算太长?
当然了,长办法或类的划分有点主观.有一个很有帮忙的 经验法例,您可以说非代码注释行超越 100 行的办法是长办法.不过,实际的 数值是按照评论的人而改变的.就我而言,终止点(cutoff point)大约是 50 行代码,但有些开辟人员会说,假如某一办法需求您向下转动整整一天才能看完 ,那么该办法太长了.终止点的定义取决于您自己.
近似地,您必须有 自己的肯定精确类大小的杰出判断.很多人所倡导的一条经验法例是,类的代码 行超越 1,000 行便可以说该类太长了.而另一些人则认为最好不要超越 500 行 代码.
内部类耦合
关于一对象与其他对象之间的关系,复杂情势 会不断反复其自身.关于导入很多外部依靠项大概拥有很多 public 办法的类, 不但理解起来有些艰难,并且所带来的责任重担的增添也会招致某种脆弱.
我将从依靠项开始.假如某一对象导入的外部类超越 80 个(不包含普 通的 Java™ 系统库),那么便可以说该类具有高度输出耦合,这意味着 更改导入的类大概会影响该类本身.在最糟糕的情形下,假如导入的是具体的类 ,并且它们的行为发生更改,那么履行导入的类大概会中止!
察看对象导入的数目就很简单猜测脆弱性,但假如利用 .* 标记(比方 com.acme.user.*)导入整个包,则极大概产生误导.为了更切确起见,大概需 要注意对象所拥有的惟一范例 的数目(该数目可通过解析代码得到 —— 不是 import 语句).假如利用程序的包构造大致上以某种在少数包中包含很多类的 方法计划,则惟一范例器量(types metric)大概很有帮忙.
包含很多 public 办法的类也有很多导入.这些类普通会成为代码基的中央 ,就像 Facades 或工具类那样.因为存在这种责任(通过大量 public 办法导 出),所以它们具有高度的输入耦合,也会招致反向的脆弱性.假如这些类中的 任何一个发生更改,各种表面上不相关的利用程序部份大概 发生中止.
以上是“追求代码质量 - 顺服复杂的冗长代码[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |