项目零散知识积累(三)

来源:互联网 发布:安卓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对象中,这个对象无表,为了方便数据响应,设置的一个基础类。这里理解下,获取答题结构这个逻辑,则考试过程中它究竟扮演了怎样的角色?

 

           

 

 

 

 

 

 

 

0 0
原创粉丝点击