一个“在线学习-练习“的简单设计和应用

11-04-02 jeffrey4chartcrm
         

最近正好是项目的间隙,趁空闲,找了一个“在线学习-练习”的需求,进行了简单的设计和实现,也算是对四色图和oo编程的一个实践。

需求如下:

1.学生通过学习材料来学习,通过练习题目来练习。

2.课程下有科目,科目下有单元,单元是由学习材料和练习题目来组成的,是一个“课程”-->“科目”-->“单元”-->“内容(学习材料和练习题目)”的分类结构,如:数学-->中学数学-->几何-->几何学习材料和几何练习题目

3.学生需要知道自己学了哪几个单元的材料,做了哪几个单元的习题。

四色图如下:

uml

测试运行代码

public void testStudy(){

StudyService studyService = new StudyServiceImpl();

User student = new User("dragontec");

Course math = new Course("数学");

Subject subject1 = new Subject("中学数学", math);

Unit unit = new Unit("几何", math, subject1);

UnitType type = new UnitType("学习");

unit.setUnitType(type);

StudyContent book1 = new StudyContent("几何学习材料");

unit.getUnitType().addContents(book1);

//开始单元学习

Study study = studyService.beginStudy(new Date(), student, math, subject1, unit);

//针对具体材料学习

StudyDetail detail1 = studyService.beginDetailStudy(new Date(), book1, study);

//具体学习完毕,告诉单元学习

detail1 = studyService.endDetailStudy(detail1, new Date());

study.finishDetails(detail1);

//单元学习完毕

study = studyService.endStudy(study, new Date());

System.out.println(student.getUsername()+"完成了"+math.getName()+"-->"+subject1.getName()+"-->"+unit.getName()+"的学习,总用时:"+study.getTimeCost());

System.out.println("其中,具体学习了《"+study.getDetails().get(0).getLinkedContent().getContent()+"》,用时:"+study.getDetails().get(0).getTimeCost());

}

[该贴被jeffrey4chartcrm于2011-04-02 15:22修改过]

[该贴被jeffrey4chartcrm于2011-04-02 16:04修改过]

         

1
banq
2011-04-02 16:30

不错,Course课程和活动 Study一目了然,Subject应该属于Course的des,不过看课程内部属性和方法,是否大部分为des,如果是PPT,应该有明确的时间 地点。

jeffrey4chartcrm
2011-04-02 17:46

因为有需求,需要追踪学生对每个课程,每个科目,每个单元的学习情况。但是,只能通过课程访问科目,通过科目访问单元,通过单元访问内容(学习材料和练习题目)。这样,需要区分每个具体的课程,所以把它归为PPT,通过一个系统给予的全局id加以标识。Subject是属于Course的des,跟Subject是聚合关系。

单元(Unit)这里有点模糊,因为考虑到Study是针对Unit的,但是单元又分单元学习和单元练习,也就说Unit的内容不同,Unit的性质决定其拥有什么内容。

一开始的想法是在Unit中增加两个集合属性List<StudyContent> studyContents和List< PracticeQuestion> practiceQuestions,但是,如果以后Unit下有其他内容的话,就会在Unit下硬加入其他集合属性,所以考虑把这部分抽象出来,成立一个UnitType类,封装了Unit的类型typeName和拥有的内容List<Object> linkedContent。

但是,不知道怎么处理比较合理一点,是把UnitType当作Unit的des,然后Study和Unit关联?

还是把UnitType作为Unit的继承,理解为四色图中的ROLE,Study直接和UnitType关联,概念上理解为,unit在这次学习中扮演的是单元学习的角色。

virusswb
2011-07-11 11:35

我登陆了吗,试一下吧。

virusswb
2011-07-11 11:54

两个行为:学习,练习。

各自有自己的thing,有自己的内容。

学习的内容是材料,练习的内容是习题。

这两个内容的描述有很大的不同。习题要有分数,练习时间,难度等等。

我觉得理解为角色更好,因为是两种不同类型的内容。

2Go 1 2 下一页