有一些Bug是由于系统设计不合理导致的,比如多入口问题,导致系统扩展复杂,维护困难;比如字段修改问题,系统很多地方不是模块化的,都是代码的直接复制粘贴,
导致维护非常困难,改一个字段,要改很多地方,并且容易出错。之后会对系统设计进行更进一步分析和改进(重构),希望从根本上让这些Bug少产生。给以后设计系统时提供支持。
# # 入口问题
问题原因:项目维护或者改造的时候,有新需求,改字段或者加字段,如果对项目入口不熟悉,会出现隐藏需求漏改的情况。
措施:首先学会使用系统,熟悉系统的各个按钮、超链接、tab页,分析系统的主要功能,各个功能的入口,新增、删除、编辑、导入、导出、修改等
案例分析:
实车流程启动入口:初步录入提交,正式创建提交,暂存编辑提交,批量下达提交,暂存区发起整改
批量下达提交是对已有数据更新,默认值加了没有效果,因为不是新建的数据。还是要在5个入口的相应位置添加设置标识的代码
需求添加一个流程节点,事后发现系统有5个入口ABCDE。
# # 新需求兼容老需求问题
问题原因:
1. 有些新需求,比如,加字段,是不是要改这个字段所有出现的地方
2. 比如,接口加了字段,要求在各个状态变更时,将新加的字段回传回去,那么已经跑的流程,是处于中间状态的。需要在系统里判断如果新字段为空的情况,传过去默认值还是空字符串。
3. 在新老流程兼容时,最好是数据库中兼容字段加默认值,这样新创建的比如默认1。
# # 工作流启动后停在发起流程节点。
原因:工作流人员设置错误
需要在查看页面删除分配用户,重新设置保存,发布
# # 前端样式或者js修改无效果的情况
样式没效果,可以在样式上加!强制生效。
还有的情况是,多个页面可能用的是同名的class,最好在每个页面设置不同的namespace,防止样式冲突。然后这样去设置样式 .父class .子class
js函数也需要为不同的页面设置不同的namespace,可以定义一个代表当期页面的对象,让方法和属性都绑定到这个对象上
<button type="button" class="close" ></button>
对它绑定一个点击方法
$(".close").on("click",function(){
//关闭逻辑
return false;
});
return false;想让点取消后不关闭,发现没有效果。刚搜了dwz的源码发现有一个这个鬼:
$("a.close", dialog).click(function(event){
$.pdialog.close(dialog);
return false;
});
<button type="button" class="submit" ></button>
# # 实车导入未对扩展字段的长度限制
大部分字段在系统运行时,是动态传递的,必须统一所有这个字段用到的地方的字段长度,否则用户刚好填了一个最大值,可能设置字段长度小的地方会出现Bug。
# # Mybatis问题1
编辑(update)的时候,必填项需要在mybatis中判断<if test="extend01!=null and extend01!=''">
不必填可以为空,只需判断不是null,<if test="extend01!=null ">,否则将不必填的内容清空后,更新无效
# # 前端问题1
$("#jdsc").find("input").each((index,elem) => console.log(elem));
$("#jdsc").find("input").attr("disabled",false);
# # jquery元素转dom元素
var problemSource = $("#problemSource_id")[0];
# # 流程状态变更 需要记录日志
记录日志可以使用切面编程,使用Spring aop
# # 前端问题
新问题创建后,自动排序了 查询条件planStepStatus默认返回了"null"
# # 环境问题
头晕,居然在119上测了半天本地改的东西,立马转到localhost
# # 国际化问题
状态错误,国际化资源提示
# # 在修改的时候,延期时间重新计算
修改计划关闭时间,重新计算应完成时间
# # 时间问题
延期时间计算,一般用户不希望当天算延期,所以sql条件中计算的时候注意,and planDT + 1 < sysdate
# # 记录问题跟踪
# # 修改记录问题
比较修改前后无变有,有变无;少变多,多变少
只有修改的字段才记录日志
修改项颜色高亮标记
# # 综合问题
如果扩展功能,考虑功能使用前后的差异,需要做兼容,通常需要在一些差异点判断非空。
比如,加一个字段。不仅要在所有用到的地方加。还需要考虑之前的已经在流程中的item,这些item之前的路径中没有这个新加的字段,后续继续走流程,需要判断这些老item的
这个字段为空的情况。
这点让我想到Hotspot虚拟机的解决方案,为了解决GC时,不会产生新的引用关系,会让系统停顿,就是Stop the word。让整个系统状态一致。否则,一边GC,一边产生新的引用关系,
这样没办法控制。
HotSpot采用的是主动式中断方式,需要中断时,比如堆内存达到临界值。就在安全点设置标记,线程轮询中断标记,如果为true,就自己中断。
陆续更新ing...