首先说这个项目的结构比较混乱,软件架构我还看得不是很清楚,但代码结构实在很混乱,程序员的水平实在不敢恭维,代码中竟然能出现“index_1”一直到index好几十的那种命名方式,faint!后来还要一直遵守这种命名方式,实在很无聊。。。
好了,我就说说我今天的收获。
首先是CheckboxTreeViewer的setSubtreeChecked(Object element, boolean state)方法引起的。代码如下:
public boolean setSubtreeChecked(Object element, boolean state) {
Widget widget = internalExpand(element, false);
if (widget instanceof TreeItem) {
TreeItem item = (TreeItem) widget;
item.setChecked(state);
setCheckedChildren(item, state);
return true;
}
return false;
}
底下代码没多大意思,看第一行的internalExpand方法。internalExpand主要是调用了internalGetWidgetToSelect方法,internalGetWidgetToSelect中又调用findItem方法,findItem又调用了findItems方法,跟进的调用了doFindItem方法,这里比较有趣,doFindItem是AbstractTreeViewer里实现的方法,接下来调用了internalFindItem,来看看:
private Widget internalFindItem(Item parent, Object element) {
// compare with node
Object data = parent.getData();
if (data != null) {
if (equals(data, element)) {
return parent;
}
}
// recurse over children
Item[] items = getChildren(parent);
for (int i = 0; i < items.length; i++) {
Item item = items[i];
Widget o = internalFindItem(item, element);
if (o != null) {
return o;
}
}
return null;
}
下面for循环里递归调用没啥意思,主要看上面的
// compare with node
Object data = parent.getData();
if (data != null) {
if (equals(data, element)) {
return parent;
}
}
每一个Item都有一个data与之关联,因此那里才会调用getData,关键是下面那个equals方法,它是StruturedViewer的方法来看看:
protected boolean equals(Object elementA, Object elementB) {
if (comparer == null) {
return elementA == null ? elementB == null : elementA.equals(elementB);
} else {
return elementA == null ? elementB == null : comparer.equals(elementA, elementB);
}
}
代码就是有定义比较器,则用比较器比较,否则就用对象本身的equals!当时在这里终于查出了虫子在哪里。原来的程序员写的代码很ugly(重写了equals,但没有覆盖hashCode,之前可能没什么问题,但很多类库的东西是与这两个配合使用的,见Effective Java)。
由于系统本身的代码结构混乱,为了最大限度的避免对原来系统造成损害,我只好自定义了比较器,而不去改对象的equals方法。
这个项目据说之前做了7,8年了,我现在刚接手,我感觉之前的程序员水平实在很劣质。其实写代码是一种艺术活,不知道为什么大家写代码时都不动动脑子,好像能做出功能就很牛b(软件工程不是算法比赛,不是gcj,不是acm icpc,不是topcoder,没必要写代码好像赶时间似的,更何况时间也没赶上,东西做得也不好)。就像绝影说的,代码写的不好,会被后来的程序员骂,我以后写代码可不想被后面的程序员骂。尤其是做工具库的。。
可能本身这项目都属于二次开发的二次开发。。。的吧,可应用软件也不能这么写。。。
代码出来结构乱点有两种原因可以理解:
1.为了效率的考量,如linux内核一些地方,黑客们写的代码也不是就是乱,但很多地方就是看不懂,如果换成另外一种方式来写,可能就更好理解了,但内核那种级别,效率是最重要的。再如boss zhang 说百度基础库里的B+树代码结构也很混乱,但是人家比较稳定,这么多年了没人去改它,并且都建议不改。
2.为了某些考量。对应到具体的一些系统,有些考量比较特别,但这种特别的地方最后用代码注释或者文档写出来。但现在的项目时代码结构乱,而且注释也没有,有的话也是那种废话注释,关键的地方从不写注释,真不知道怎么想的。。。。
再者,我发现测试也很重要,可我发现公司的tester根本不会做测试,基本的流程分支测试都不会做,都是开发人员报了一个错误,然后在Bugzilla里登记一下,faint!看来真应该叫她好好看看BOP那本关于二分搜索测试的内容,测试其实还是很难的一种技术。另外,我觉得测试之后应该有test case表,但是很遗憾,也没有。。。。。
分享到:
相关推荐
【CheckboxTreeViewer】是一种在Java环境中用于展示树形结构数据,并且节点可勾选的视图组件。在Java开发中,特别是在构建用户界面时,它是一个非常实用的工具,允许用户交互式地选择或取消选择树中的特定项。这个...
为了在TreeViewer中添加复选框功能,我们需要使用CheckboxTreeViewer类,这是TreeViewer的一个扩展,专门为包含复选框的树节点而设计。 实现步骤如下: 1. **创建CheckboxTreeViewer实例**:首先,你需要在你的...
沙度
基于prometheus官方插件nodeexporter修改
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
opengl
【大厂面试专栏】一份Java程序员需要的技术指南,这里有面试题、系统架构、职场锦囊、主流中间件等,让你成为更牛的自己!_technology-talk
乘用车碟刹刹车片,全球前25强生产商排名及市场份额(by QYResearch).docx
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
各省、自治区、直辖市社会发展各领域_中国社会统计年鉴数据2006-2021年-最新出炉.zip
KWDB 是一款面向 AIoT 场景的分布式多模数据库产品,支持在同一实例同时建立时序库和关系库并融合处理多模数据,具备千万级设备接入、百万级数据秒级写入、亿级数据秒级读取等时序数据高效处理能力,具有稳定安全、高可用、易运维等特点。
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
配置好的vim配置文件,拿来就可以使用,可以快速搜索代码以及文件,函数跳转等,完全可以当一个ide使用。配置文件中都有自己写的中文注释,不懂的可以看注释。
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
原文链接:https://blog.csdn.net/zsd12379/article/details/141302581 包含功能: 用户管理:实现用户注册、登录、权限分配及个人信息管理,确保系统访问的安全性。 球员管理:维护球员的基本信息、职业生涯数据、伤病记录等,支持查询与统计分析。 赛程信息管理:记录比赛的日程安排、对阵双方、比赛结果及场地信息,便于赛事组织与追踪。 国家队管理:管理国家队的成员名单、教练团队、历史战绩及国际排名,支持队伍分析与比较。 新闻资讯管理:发布篮球相关的新闻、公告,包括赛事报道、球员动态等,支持内容编辑与审核。 新闻分类管理:对新闻资讯进行分类维护,如赛事新闻、球员专访、技术分析等,便于用户按需浏览。 在线留言管理:提供用户留言功能,收集用户反馈与建议,支持管理员回复与处理,增强用户互动。
可盈保险合同管理系统项目描述 可盈保险合同管理系统是为了满足保险行业对合同管理的精细化、高效化需求而设计的。该系统集成了多个功能模块,旨在帮助保险公司及其代理人更好地管理保险合同,提高工作效率和客户满意度。 系统主要包含以下功能: 首页:作为系统的入口,首页提供了系统的概览和导航功能,方便用户快速了解系统的整体布局和各个功能模块。 个人中心:用户可以在此模块中查看和管理自己的个人信息,包括账户安全、个人信息设置等,提高个性化体验。 修改密码:为了提高账户的安全性,系统允许用户随时修改自己的密码,确保账户不被非法入侵。 基础数据管理:该功能用于管理系统所需的基础数据,如客户信息、保险产品信息等,为其他模块提供数据支持。 公告信息管理:系统支持发布和查看公告信息,方便用户及时了解公司的最新动态和政策变化。 用户管理:管理员可以通过此模块对用户进行管理和审核,确保系统的用户都是合法和可信的。 客户管理:该功能用于管理客户的信息和需求,包括客户的基本信息、购买历史等,有助于销售人员更好地了解客户需求,提高销售效率。 合同管理:系统支持合同的录入、修改、查询和统计等功能,确保合同的准确性
BookChat-v2.4.zip
工业微焦点X射线管.docx
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据