项目零散知识积累(三)
来源:互联网 发布:安卓6.0优化教程 编辑:程序博客网 时间:2024/05/28 01:34
第一 : 检测项目中所使用的名是否重复的思维模式。
1,方法签名,栩栩如生。参数最好是两个,一个是名字,一个是标识。(跟自身有关系,修改时要排除自身)
2,sql语句分析。if (!StringUtils.isEmpty(ID)) { sql = " and id <> ?"}用拼好的sql去查,如果是null或者isEmpty,则return true。
第二 : 项目一个重要业务逻辑分析----获取考生的答题结构。
1,逻辑性分析。
a,对查询出来的"结果"进行判断。比如结果是对象或者list,然后进行非null判断。
b,如果对象为null,则利用paperId,查询本次考试是否未固化该考生试卷结构。
c,sql采用的是,not exists( 无 ),这里双重否定表肯定,多注意下。
2,考虑到考生是否固化试卷也是逻辑严密性考虑。
3,考虑到参与者状态,valid,ongoing,completed。
4,findAnswerStructureList这个方法做了什么?一是addExamRecord。二是更新操作,把开始时间写进,并且把状态从valid修改为ongoing。
第三 : 项目一个重要业务逻辑分析----计算单人成绩。
1,countScoreSingle(examineeId, scoreCache),其中参数scoreCache中放的是Map<String, Integer>,其中泛型中的String是题标识,Integer是分数。
2,计算个人成绩之前,肯定container中有答案,然后把答案从容器中取出来,放入重新准备的容器List,然后调用AnswerListener中的saveExamAnswer(answerList),这个answerList装的就是container中的答案。
3,接下来,就examineeId获取examinee对象。有了对象相应地有了,这个对象中的所有属性比如需要的examId,candidateId,paperId,由这些标识,去获取想要的内容。
4,然后再获取一个最重要的东西List<AnswerStructure> list = DAO 。
5,然后利用循环对这个list进行处理。
a,判断是否为主观题,主观题默认0分,并且在程序中使用continue,仔细体会这个continue的妙处。
b,判断是否为客观题,无答案则是0分,也使用continue,细心体会这里的continue的妙处。
6,逻辑走这里,与scoreCache发生关系了。
a,由上面分析,知道scoreCache中的容器是Map<String ,Integer>,一个是题标识,一个是分数。
b,然后构造出需要的Key。String key = questionId + "#" + subquestionId;由这个key获取分数,因为在之前scoreCache中的Map的就是这么拼接而保存的,现在就是取得时候了。
c,再然后,分两种情况。一是试题(普通试题),二是子题(复合题)。
d,不管是试题还是子题都需要更新成绩。
1,首先,要校验答案是否一致。抽象出这样一个方法进行。
2,根据返回的情况。对的,则有分,在答案结构表中(structureId, score)进行更新。错的,则无分,在答案结构表中(structureId , 0)。
7,更新总成绩,首先知道总成绩在examinee表中。
a,先观察examinee表中有些什么 ? 以及理解examinee表和answer_structure中的表关系及业务逻辑关系。
b,应明确,其单个试题的分数之和等于examinee中的score。单个试题的使用时间等于examinee中的spent_time。
第四 : 项目重要逻辑分析------获取成绩列表。
1,分析sql语句。
a,表连接的顺序不太好。oracle中应小表在后。
b,过滤的条件顺序也不太好,应先过滤多的。
c,分组。
d,order by order_num 。如果这个order_num是组合索引,则非常完美。
2,关联的表有。试卷大题表,试卷问题表,答案结构表,参考者表,考试表。
总的分析:getExamScore()。由计算单个人的成绩,然后获取成绩列表,把信息装入examScore对象中,这个对象无表,为了方便数据响应,设置的一个基础类。这里理解下,获取答题结构这个逻辑,则考试过程中它究竟扮演了怎样的角色?
- 项目零散知识积累(三)
- 项目零散知识积累(一)
- 项目零散知识积累(二)
- 菜鸟学Android笔记(四十三):JSP零散知识
- python知识积累(三)字符串处理
- mysql知识积累(三)常用
- iOS 项目知识积累
- 零散知识
- 零散知识
- iOS 程序开发零散重点知识总结(一)暴走漫画制作笔记三
- C++的一点零散知识(一)
- 三月其他零散知识(技术)
- 三月其他零散知识(非技术)
- struts零散知识累积(一)
- IBM AIX零散学习笔记(三)
- xml解析三种方式知识积累
- Oracle 零散知识
- 零散知识收集
- ZOJ3962 数位DP
- Leetcode-标签为Tree 404. Sum of Left Leaves
- 《C++之那些年踩过的坑(二)》
- unity联网模块制作
- 《深入理解Java虚拟机》Java内存区域与内存溢出异常
- 项目零散知识积累(三)
- Ubuntu下使用VI编辑文件必知的常用命令
- 欢迎使用CSDN-markdown编辑器
- JS浅克隆与深克隆
- [Cocos2D]Cocos2D在Windows上面的环境搭建
- 基于Vue 2.0高仿 <今日头条> 单页应用。
- Butter Knife Field and method binding for Android views
- Leetcode-标签为Tree 112. Path Sum
- vue专题