以下内容引自某个项目的一篇codereview报告
目前的codereview好像对代码的结构、代码的冗余关注的太少,这两天看了一下,发现xx系统里存在不少的冗余,这些都是由一些代码功能片段放置位置的不合理,类的职责分配不合理造成的。
譬如:
对于领域模型CreditCont,它的状态是否终止、有效、关闭;它是否已过期;它是否已生效等均属于领域模型CreditCont的本质特征,这些特征的判断会频繁的被其他类所使用,但是,目前对这些特征的判断都是由其他类负责.
譬如当某个类里的某个方法需要判断授信协议是否过期时,就直接在这个方法里写上判断语句,这样当多个类的多个方法都需要该判断功能时,就会到处都充斥着重复的判断语句.
譬如在类ContractStatusHelper里,有三个方法需要对授信协议是否过期进行判断,三个方法里都充斥着同样的判断语句:
在类ContractAmountHelper里,也存在同样的冗余:
在类ContractValidatorFacadeImpl里也有同样的代码片段。
像这种对某个领域模型本质特征进行判断的功能,应该由领域模型自己负责(即将这样的功能提炼为一个方法并移入领域模型本身,实际上这也是Martin Flower在重构中所提倡的),这样其他类需要对该特征进行判断的时候,就只需要委托领域模型去判断了,达到了复用的目的,而且每个类的职责也更清晰。
譬如上面对授信协议是否过期的判断就可以放在CreditCont中
其他类需要判断授信协议是否过期时,只需要委托调用CreditCont的isNotDue方法就可以了,
这种结构使得代码的语义也更清新,看见函数的名称就知道该行代码的功能。
而按照目前的代码结构,不仅使代码充斥着冗余,而且导致有些类非常复杂,功能很多(因为它负责了很多本不应该由它负责的功能),而有些类又非常的单薄,是贫血的(除了一堆get/set方法,啥事都不做),只有属性,没有任何行为或只有弱行为的类都是病态的。而且在同一个方法里,如果需要对多个本质特征进行判断,采用目前的方式,就会导致方法里到处充斥着判断语句,只见木不见林。
像这种情况,目前代码里比较多,譬如对于领域模型Bill,判断账单是否已出账,这也属于Bill的本质特征,而且也会经常被其他类用到,但目前这种功能代码片段都是放在其他类中的。
建议:对于某个方法里的一些代码片段,如果该片段所用到的方法、变量都属于(或大部分属于)另外一个类,而与该片段所在的类没有任何关系(或者关系很少),应该将该片段提炼为一个方法并移入到另外一个类中,如果该片段所需要的一些变量在另一个类中无法获取,则可以作为该方法的输入参数传过去。
距发这篇报告又过了一年,期间还是发现很多系统都存在这种问题,职责分配不合理是导致系统复杂混乱、代码冗余的罪魁祸首。
相关推荐
VB-Code-教育-学生考试系统-源代码全VB-Code-教育-学生考试系统-源代码全VB-Code-教育-学生考试系统-源代码全VB-Code-教育-学生考试系统-源代码全VB-Code-教育-学生考试系统-源代码全VB-Code-教育-学生考试系统-源...
Employing lightweight, tool-based code review of code changes (aka modern code review) has become the norm for a wide variety of open-source and industrial systems. In this paper, we make an ...
Code-Demo-java-书籍源代码.rar
本文叫你如何进行code review代码检测
zyh-code-review.rarzyh-code-review.rarzyh-code-review.rarzyh-code-review.rar
代码审核,是对应用程序源代码进行系统性检查的工作。它的目的是为了找到并且修复应 用程序在开发阶段存在的一些漏洞或者程序逻辑错误,避免程序漏洞被非法利用给企业带来不必 要的风险。
code review 用来检查代码,生成检查报告的
Steven Code Review 2009.12M1发布包.rar 代码在线审查工具 @date: 2009-12-28 @author: YF @email: yifi@tom.com 功能: 1 方便学员学习教师的代码,无需在本机运行IDE即可以代码加亮的方式查看服务器共享的代码...
CodeReview工具的作用:1.减少评审人的缺陷记录和汇总时间,方便责任人查找问题出处;2.检视完成后生成检查报告,代码作者点击按钮可以直接找到错误处;3.任务责任人修改完成后,直接修改问题状态,组织者按快捷键...
我一直认为CodeReview(代码审查)是软件开发中的最佳实践之一,可以有效提高整体代码质量,及时发现代码中可能存在的问题。包括像Google、微软这些公司,CodeReview都是基本要求,代 我一直认为CodeReview(代码...
赠送源代码:flink-table-code-splitter-1.14.3-sources.jar 包含翻译后的API文档:flink-table-code-splitter-1.14.3-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId:org.apache.flink,artifactId:...
Source Insight CodeReview宏,增加使用说明。用于代码评审和统计。
C#-code128码-ABC-带Auto实现方式-源代码-非输入法转条码-通过方法实现各种绘图软件实现自画可以实现 code128-A code128-B code128-C code128-Auto EAN128通过以上源代码,可以实现CAD/CATIA等软件的自画128条码操作...
Code Review的作用和意义已在很多技术团队内达成共识,可是很多时候并未被有效执行,甚至被认为是一项费时费力的工作。借助一些工具可以更容易,更有效率地来进行Code Review,本文介绍的Jupiter即是其中之一。 ...
直观可视:分析结果与源代码在同一界面显示对照,快速定位。 语言多样:支持Visual Basic .NET、Java编程语言的代码审查。 自定义规范:通过自定义变更命名规范、注释规范完成代码审查。 二、功能列表 Info(内容):...
code-prettify-master 代码高亮显示插件 网页代码片段高亮显示插件,亲测可用,包含使用方法 详见: example.html
博客“ruby+selenium-webdriver测试--多个测试用例”源代码
Visual Studio Code 1.64.0 (code-stable-x64-1643864266.tar.gz)适用于 Linux x64系统。它是一个轻量级但功能强大的源代码编辑器,可在您的桌面上运行。它内置了对 JavaScript、TypeScript 和 Node.js 的支持,并...
本文档主要介绍了基于Gitlab搭建代码审查平台以及基于Gitlab-CI搭建持续集成平台。本文档最重要的内容是提供了一套基于Gitlab的代码审查流程的可落地的详细操作方案。
Github Code Review是一个Chrome扩展程序,它充当Github Pull Request之上的轻量级代码审查工具。 它使您可以批准请求请求,并查看谁轻松批准了每个请求。 通过注释以下关键字/表情符号来批准请求请求:-:+1:-:...