当前位置: 首页 > 网络应用技术

业务代码如何不编写大量If / elther?

时间:2023-03-06 14:57:08 网络应用技术

  控制结构吗?没错!您最喜欢的话,这是一种不良的味道。我没想到吗?我沉迷于每天写不良味道的经历。

  控制语句有什么问题?

  CR正在遵循我刚完成写作的博客:

  逻辑非常简单,但是有多个凹痕层。对于循环的第一层,如果其中有两个,还有两个层。如果逻辑更复杂,难道不是像啤酒肚子一样越来越多地增加吗?

  为什么代码写这个幽灵?

  因为您正在编写流媒体帐户,所以像机器人一样逐步翻译成代码。

  代码逻辑肯定是正确的,但是在实现函数后,代码不会重新组织。

  现在必须消除它。

  从for循环开始,集合集通常用于周期,并且集合中的元素在周期中进行处理。因此,循环的内容可以提取到方法中,只能处理一个元素:

  这是一个拆分,每次处理一个元素时,都会分解交易的issueArticle。

  IssueArticle缩进的原因是如果if语句。如果在检查先决条件时多次是凹痕,并且条件通过时可以执行条件。

  这样的代码可以使用后卫条款,即设置单独的检查条件以不符合检查条件,并立即返回该方法。

  用守护者替换为守卫条款代替嵌套条件。

  重建IssueArticle函数:

  现在,这只是一层凹痕,大大减少了代码的复杂性,并且可以大大提高可读性和维护。

  在大多数人中,如果差点差点飞在一起,给人留下了深刻的印象。

  不能写吗?

  能!

  根据文章信息进行费用:

  没有其他的,简单的方法是尽早返回每个逻辑,类似于监护人:

  简单的业务代码,此重建仍然很容易,但是复杂的代码必须是多态性。

  嵌入和其他陈述都是不良口味,它们本质上是简单的,因为代码的分支太多,其复杂性将大大增加。

  测量代码复杂性常用的标准。循环复杂性(CC),CC越高,代码越复杂,理解和维护成本就越高。

  在CC判断中,可以通过工具检查主位置的循环和选择声明。例如,CheckStyle可以限制最大圆的复杂性。当圆的复杂性大于设定阈值时,报告了错误。

  根据系统中用户的用户级别,实际支付价格将有所不同。水平越高,折扣越高。

  这两个函数中出现了类似的代码,最相似的部分是开关,均根据用户级别判断。

  这不是基于用户级别的唯一代码。各种类型的用户 - 级别的方案都需要类似的代码,这也是一个典型的不良口味:重复开关(eRETERD开关),通常是由于缺乏模型。

  解决方案:带有多态性的复发的杂文。

  介绍UserLevel模型以消除开关:

  可以通过先前的代码删除开关:

  切换实际上是“如果... else”的简化写作,相当于两者。因此,这种重建方法用多态性代替条件表达,而不仅仅是替换开关。

  作者:Javaedge。