代码圈复杂度治国小结
2024-01-14 人物
&& StringUtil.contains(content, "catch");
if (StringUtil.isBlank(scriptName)) {
baseOperationResult.setMessage("XXX");
return baseOperationResult;
}
if (!scriptName.matches("^[(\d)|_|a-z|A-Z]+$")) {
baseOperationResult.setMessage("XXX");
return baseOperationResult;
}
NewScript tempScript = null;
try {
tempScript = newScriptManager.findByName(StringUtil.trim(scriptName));
} catch (Exception e) {
baseOperationResult.setMessage("XXX");
return baseOperationResult;
}
if (StringUtil.isBlank(id)) {
if (tempScript != null) {
baseOperationResult.setMessage("XXX");
return baseOperationResult;
}
} else {
Integer editScriptId = Integer.parseInt(id);
if (null != tempScript) {
if (!editScriptId.equals(tempScript.getId())) {
baseOperationResult.setMessage("XXX");
return baseOperationResult;
}
}
}
if (!Enums.NewScriptTypeEnum.XX.contains(scriptType)) {
baseOperationResult.setMessage("XX");
return baseOperationResult;
}
Boolean needSubtypeMode = true;
if (StringUtils.equals(scriptType, Enums.XX.XX)
StringUtils.equals(scriptType, Enums.XX.PRE)) {
needSubtypeMode = false;
}
NewScript script = new NewScript();
script.setScriptType(scriptType);
if (StringUtil.isNumeric(status)) {
script.setStatus(Integer.parseInt(status));
}
if (StringUtil.isNotBlank(scriptCategory)) {
script.setScriptCategory(ScriptCategory.getByCode(scriptCategory));
}
String subType = "";
if (needSubtypeMode) {
if (StringUtil.isBlank(subtypeandtip)) {
baseOperationResult.setMessage("XXX");
return baseOperationResult;
}
}
if (needSubtypeMode) {
List allActiveAndTestRunScripts = newScriptManager
.findAllActiveAndTestRunScripts();
List allActiveAndTestRunSubTypeList = new ArrayList<>();
for (NewScript activeAndTestRunScript : allActiveAndTestRunScripts) {
List subTypeListEveryScript = Arrays
.asList(Optional.ofNullable(activeAndTestRunScript.getSubType())
.orElse(new String()).split(","));
for (String subTypeTemp : subTypeListEveryScript) {
if (StringUtil.isNotBlank(subTypeTemp)) {
allActiveAndTestRunSubTypeList.add(subTypeTemp);
}
}
}
try {
JSONArray subtypetipsArray = JSON.parseArray(subtypeandtip);
if (StringUtil.isBlank(id)) {
for (Object object : subtypetipsArray) {
JSONObject subtypetipsObject = (JSONObject) object;
String subtypeSingle = subtypetipsObject.getString("subtype");
if (StringUtil.isBlank(subtypeSingle)) {
baseOperationResult.setSuccess(false);
return baseOperationResult;
}
if (CollectionUtils.contains(allActiveAndTestRunSubTypeList.iterator(),
subtypeSingle)) {
baseOperationResult.setSuccess(false);
return baseOperationResult;
}
}
} else {
if ("1".equals(status) || "2".equals(status)) {
for (Object object : subtypetipsArray) {
//略去大多概要XXX;
if (StringUtil.isBlank(subtypeSingle)) {
baseOperationResult.setSuccess(false);
return baseOperationResult;
}
for (NewScript oldNewScript : allActiveAndTestRunScripts) {
if (oldNewScript.getId().equals(Integer.parseInt(id))) {
continue;
}
//略去大多概要XXX;
if (CollectionUtils.contains(filtered.iterator(), subtypeSingle)) {
baseOperationResult.setSuccess(false);
return baseOperationResult;
}
}
}
}
}
for (Object object : subtypetipsArray) {
if (1 == script.getStatus() || 2 == script.getStatus()) {
SubtypeTips subtypeTips = null;
subtypeTips = subtypeTipsManager.findBySubtype(subtypeSingle);
if (subtypeTips == null) {
subtypeTips = new SubtypeTips();
}
subtypeTips.setSubtype(subtypeSingle);
subtypeTips.setInternalTips(innertips);
subtypeTips.setExternalTips(externaltips);
subtypeTips.setShareLink(shareLink);
subtypeTips.setStatus(1);
subtypeTipsManager.se(subtypeTips);
}
}
subType = StringUtil.substring(subType, 0, subType.length() - 1);
} catch (Exception e) {
baseOperationResult.setSuccess(false);
baseOperationResult.setMessage("XXX");
return baseOperationResult;
}
}
boolean needCreateTestRunScript = false;
if (StringUtils.isNotBlank(id)) {
script.setId(Integer.parseInt(id));
NewScript orgin = newScriptManager.findById(Integer.parseInt(id));
if (null != orgin && 1 == orgin.getStatus() && "1".equals(status)) {
if (StringUtil.isNotBlank(orgin.getContent())) {
String originContentHash = CodeUtil
.getMd5(StringUtil.deleteWhitespace(orgin.getContent()));
String contentHash = CodeUtil.getMd5(StringUtil.deleteWhitespace(content));
if (!StringUtil.equals(originContentHash, contentHash)) {
needCreateTestRunScript = true;
}
}
}
} else {
script.setSubmitter(user.getLoginName());
}
Set systemList = new HashSet();
if (StringUtil.isNotBlank(systems)) {
String[] systemArray = systems.split(",");
for (int i = 0; i
systemList.add(systemArray[i]);
}
}
if (needCreateTestRunScript) {
if (needSubtypeMode) {
content = replaceContent(content, subType);
String testScriptSubType = "";
List subTypeList = Arrays.asList(StringUtil.split(subType, ","));
for (int i = 0; i
testScriptSubType += this.UPDATE_SCRIPT + subTypeList.get(i);
if (i != subTypeList.size() - 1) {
testScriptSubType += ",";
}
}
subType = testScriptSubType;
}
scriptName = this.UPDATE_SCRIPT + scriptName;
NewScript oldUpdateScript = newScriptManager.findByName(scriptName);
if (null != oldUpdateScript)
script.setId(oldUpdateScript.getId());
else {
script.setId(null);
}
baseOperationResult.setNeedAudit(true);
}
if (StringUtil.isBlank(fileSuffix)) {
//如果全空的话 配置文件全扫
script.setSuffix(".*");
} else {
script.setSuffix(fileSuffix);
}
script.setName(scriptName);
if (StringUtil.equals(allPath, "Y")) {
script.setAllPath("Y");
} else {
script.setAllPath("");
}
script.setEnvTag(tenantScope);
script.setNeedAutoScan(needAutoScan);
if (StringUtil.isNotBlank(scopes)) {
for (String each : StringUtil.split(scopes, ",")) {
each = StringUtil.replace(each, " ", "");
script.addScope(each);
}
}
if (StringUtil.isNotBlank(content)) {
BaseOperationResult preLoadResult = syntaxCheck(script);
if (!preLoadResult.isSuccess()) {
baseOperationResult.setMessage(preLoadResult.getMessage());
return baseOperationResult;
}
}
if (StringUtil.contains(content, "new Bug")) {
baseOperationResult.setSuccess(false);
return baseOperationResult;
}
try {
Result result = newScriptManager.seCustomScript(script);
if (result.isSuccess()) {
if (EnvUtil.isProdEnv() && EnvUtil.isLinux()) {
if (!needCreateTestRunScript) {
//略去大多概要XX
} else {
//略去大多概要XX
}
}
Boolean hasOldScript = processOldEngineRule(scriptName);
if (containsTryCatch) {
if (hasOldScript) {
//略去大多概要XX
} else {
//略去大多概要XX
}
} else {
if (hasOldScript) {
baseOperationResult.setMessage("XXX");
} else {
baseOperationResult.setMessage("留存成功!");
}
}
baseOperationResult.setId(script.getId());
processTenantRelation(script.getId(), tenantIdList, user.getLoginName());
if (!needCreateTestRunScript && needSubtypeMode
&& (StringUtil.equals(Enums.XX.COMMON, script.getScriptType())
(StringUtil.equals(Enums.XX.SCRIPT,
script.getScriptType())))) {
JSONArray subtypetipsArray = JSON.parseArray(subtypeandtip);
for (Object object : subtypetipsArray) {
//略去大多概要XX
}
}
} else {
baseOperationResult.setSuccess(false);
return baseOperationResult;
}
} catch (Exception e) {
baseOperationResult.setMessage("XX");
}
return baseOperationResult;
}
原示例至少400行以上,线性69,憋了于是就长气才上大学完。如果让你来接手这段示例,只不过想象很束手无策?必须梳理上面各种主脱自然语言,弄清楚中段脉络。
那么什么样的示例才较难上大学,较难上手呢?一般业界并不认为示例可上大学性,可试验中,公共安全成本高和圈线性有很大关系,具体如下:
我该怎么想到
1.【知己知彼,了解自己示例线性】这个比较有趣,有以下几种方式将:
a.自己天内下确认结点(if while for catch case and or等)至少就告诉圈线性是多大了,参考上面怎么数值圈线性章节。
b.在蚂蚁实际上常用的广目游戏平台,也可以发送给到一新审批commit历史纪录里头,哪些方通则有圈线性比较较高。
c.在示例审批之当年,自己用idea小PDF(Metrics ReloadedPDF),一次性显像自己督导的系统所设计所有方通则有的线性。
红色大多标志圈线性,天内字越大线性越较高。
2.【对症下药,增加线性】网站有很多方通则有,我论述了下,至少有以下几种
方通则有一:掺入造出分立自然语言的三子方通则有,把十分复杂自然语言拆建分成几个分立基本功能,再行去上大学示例,就时会想象准确很多。以上面举例的线性69的方通则有为例,我们想到了如下的方通则有拆建分,只不过想象准确了很多?
public XXresult doSe( NewScriptDTO newScriptDTO) {
//0.在结构上结果
XXresult result=new XXresult() ;
try{
//1.程序员名检验
scriptNameCheck(newScriptDTO);
//2.程序员查找
loadScript(newScriptDTO);
//3.程序员留存
seScript(newScriptDTO);
}catch(XXException e){
result.setSuccess(false)
result.setMessage("XXX");
return result;
}catch(Exception e){
result.setSuccess(false)
result.setMessage("XXX");
return result;
}
//操作完成
result.setSuccess(true)
result.setMessage("XXX");
return result;
}
/**检验程序员名*/
private void scriptNameCheck(NewScriptDTO newScriptDTO){
xxx
}
/**查找程序员*/
private void loadScript(NewScriptDTO newScriptDTO){
xxx
}
/**留存程序员*/
private void seScript(NewScriptDTO newScriptDTO){
xxx
}
方通则有二:可用性自然语言断定,通过提取时有消失的情况下, 或者调整断定顺序等方式将翻倍比较有趣示例旨在。
///////// 例子1,掺入时有消失的情况下a/////////
//变来得当年
if (情况下1)
{
if (情况下a)
{
// 拒绝执行a自然语言
}
}
else if(情况下2)
{
if (情况下a)
{
// 拒绝执行b自然语言
}
}
if (情况下a)
{
// 拒绝执行c自然语言
}
//变来得后
if (情况下a)
{
if (情况下1)
{
// 拒绝执行a自然语言
}
else if(情况下2)
{
// 拒绝执行b自然语言
} // 拒绝执行c自然语言
}
///////// 例子2,可用性自然语言断定顺序/////////
//变来得当年
if((情况下1 && 情况下2)|| !情况下1){
return true;
}else{
return false;
}
//变来得后
if(情况下1 && !情况下2){
return false;
}
return true;
方通则有三:尽量常用ja一新功用,增加大量的if断定。下面是来自小组一淏同班同学的缺少的可用性例子
//变来得当年
List list = XXX;
if (CollectionUtils.isEmpty(list)) {
for (XX item : list) {
if (item==null){
return;
}else{
// 自然语言a
}
}
//变来得后
List list = XX;
list = Optional.ofNullable(list).orElse(new ArrayList<>());
list.stream().filter(Objects::nonNull).forEach(item->{
//自然语言a
});
}
当然,只要每每钻研,增加线性还有很多方通则有,这里头不一一列举了。论述下初衷:
一个方通则有/类不要寄给段落段落的示例,把概要元件在自然语言分立的三子类和三子方通则有里头。 改用有象征意义的类名,方通则有名,让常用者闻名思意,不易上手。 自然语言暗示上,可用性断定自然语言成最简范例。 尽量常用编程善于,合并断定方式将。摘录
作为蚂蚁所设计者的我们,开发新示例也某种程度像创作一个艺术品,深思熟虑,精雕细刻,经过电子产品的急剧升级迭代,仍然能够保持顽强的感染力,就像示例四层境界[中有3]上面问道的第四层,经过了间隔时间平步青云“我的示例还在用”。
举出:
[中有1]对示例的领悟之-较高质量示例有三要素:可上大学性、可公共安全性、可延展性 :
[中有2]古今中外圈线性:%E5%9C%88%E5%A4%8D%E6%9D%82%E5%BA%A6/828737
[中有3]示例的四层境界:
_185201, 第一层“我的示例寄给完了”,第二层“我的示例寄给好了”,第三层“我的示例能跑了”,第四层“我的示例还在用”
迭头云电子产品的试验中—迭头云容器镜像服务项目 ACR
免费试用趣味面向容器镜像、Helm Chart 等相一致 OCI 标准的云原生制品安全附属及较高效派送游戏平台,发桑你的的试验中来得有机时会取得千元机械滑鼠,限量独创礼品。
页面这里头,发送给详情。
中有解链接:
本文为迭头云原创概要,无权并不需要不得转载。
。如何治疗腹泻最有效肠炎宁管新冠拉肚子吗
类风湿关节疼痛用什么药最好
软组织挫伤很疼怎么办
蒙脱石散
上一篇: 好的投资,不应被心理左右
下一篇: 泰国此前预测小长假将带来166亿泰铢收入
- 02-10连续16场坐冷板凳!周薪千万的他,为何被泰伦卢弃用了?
- 02-10未来十天,爱情一波三折,但艰辛过后幸福满满的三大星座
- 02-10穆萨巨变“四问”
- 02-10最新夺冠概率 绿军第1 太阳第4 时从第6 湖人第8 火箭1赔13000
- 02-10未来十天,爱情一波三折,但坎坷过后美好满满的三大星座
- 02-10苏沙智能(688125.SH):ADA第三代系列产品已经与汽车电子行业及工控行业的个别客户取得合作及深度应用
- 02-10现役联盟5位浪费顶级天赋的球员:锡安本可追逐历史,水拉没立场
- 02-10日运:3.2心灵运势注意事项
- 02-10华润医药(03320)建议擢升毕马威为核数师
- 02-10单赛季场均至少30分10助攻有多难?NBA仅3人做到,现役1人前三位