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

最近正好是项目的间隙,趁空闲,找了一个“在线学习-练习”的需求,进行了简单的设计和实现,也算是对四色图和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修改过]

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

因为有需求,需要追踪学生对每个课程,每个科目,每个单元的学习情况。但是,只能通过课程访问科目,通过科目访问单元,通过单元访问内容(学习材料和练习题目)。这样,需要区分每个具体的课程,所以把它归为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在这次学习中扮演的是单元学习的角色。

我登陆了吗,试一下吧。

两个行为:学习,练习。
各自有自己的thing,有自己的内容。
学习的内容是材料,练习的内容是习题。
这两个内容的描述有很大的不同。习题要有分数,练习时间,难度等等。
我觉得理解为角色更好,因为是两种不同类型的内容。

请问,用户角色怎么体现?如何区分注册用户和非注册用户