控制结构吗?没错!您最喜欢的话,这是一种不良的味道。我没想到吗?我沉迷于每天写不良味道的经历。
控制语句有什么问题?
CR正在遵循我刚完成写作的博客:
逻辑非常简单,但是有多个凹痕层。对于循环的第一层,如果其中有两个,还有两个层。如果逻辑更复杂,难道不是像啤酒肚子一样越来越多地增加吗?
为什么代码写这个幽灵?
因为您正在编写流媒体帐户,所以像机器人一样逐步翻译成代码。
代码逻辑肯定是正确的,但是在实现函数后,代码不会重新组织。
现在必须消除它。
从for循环开始,集合集通常用于周期,并且集合中的元素在周期中进行处理。因此,循环的内容可以提取到方法中,只能处理一个元素:
这是一个拆分,每次处理一个元素时,都会分解交易的issueArticle。
IssueArticle缩进的原因是如果if语句。如果在检查先决条件时多次是凹痕,并且条件通过时可以执行条件。
这样的代码可以使用后卫条款,即设置单独的检查条件以不符合检查条件,并立即返回该方法。
用守护者替换为守卫条款代替嵌套条件。
重建IssueArticle函数:
现在,这只是一层凹痕,大大减少了代码的复杂性,并且可以大大提高可读性和维护。
在大多数人中,如果差点差点飞在一起,给人留下了深刻的印象。
不能写吗?
能!
根据文章信息进行费用:
没有其他的,简单的方法是尽早返回每个逻辑,类似于监护人:
简单的业务代码,此重建仍然很容易,但是复杂的代码必须是多态性。
嵌入和其他陈述都是不良口味,它们本质上是简单的,因为代码的分支太多,其复杂性将大大增加。
测量代码复杂性常用的标准。循环复杂性(CC),CC越高,代码越复杂,理解和维护成本就越高。
在CC判断中,可以通过工具检查主位置的循环和选择声明。例如,CheckStyle可以限制最大圆的复杂性。当圆的复杂性大于设定阈值时,报告了错误。
根据系统中用户的用户级别,实际支付价格将有所不同。水平越高,折扣越高。
这两个函数中出现了类似的代码,最相似的部分是开关,均根据用户级别判断。
这不是基于用户级别的唯一代码。各种类型的用户 - 级别的方案都需要类似的代码,这也是一个典型的不良口味:重复开关(eRETERD开关),通常是由于缺乏模型。
解决方案:带有多态性的复发的杂文。
介绍UserLevel模型以消除开关:
可以通过先前的代码删除开关:
切换实际上是“如果... else”的简化写作,相当于两者。因此,这种重建方法用多态性代替条件表达,而不仅仅是替换开关。
作者:Javaedge。