标签 江理课程表的构建思路review 下的文章

市面上的课程表软件很多,比如wakeup、小爱课程表、超级课程表等,但是这些通用课程表对单一学校的定制程度都不高,想要自己如果从零开始构建一个课程表软件,要怎么设计?
我不太清楚通常是如何构建一个软件的,都是我自己思考的,轻点喷:


首先,课程表一定要有课程,一定要能存储下来,能存储肯定要能访问,访问到肯定要能展示,于是就有了第一个设计框架
如果要存储课程数据,那得用到数据库,这里先介绍一下我认为安卓开发最好用的本地数据库——room数据库,在room数据库中,你可以用定义类的方式去做数据表,无痛从Cpp转到kotlin,下面附上我是如何定义课程Course的数据模型的:
`Course {

id: Long           — 主键,自增
name: String       — 课程名
teacher: String    — 教师
classroom: String  — 教室
dayOfWeek: Int     — 星期几(1-7)
weekNumber: Int    — 周次(1-20),注意:不是周范围,而是单周
startPeriod: Int   — 开始节次(小节编号1-10)
endPeriod: Int     — 结束节次(小节编号1-10)
color: Long        — 课程颜色
courseGroupId: String  — 课程组ID,同一门课不同周次共享
courseInstanceId: String — 课程实例ID,每条记录唯一
scheduleId: Long   — 所属课表ID,默认1

}`
起初我定义的数据模型中只有课程名、教师、教室、周几、周次范围这几个属性,但是随着项目的进展,我发现问题了——如果要对课程进行增删改查,那么就无法定位到课程,于是我给课程加上了id属性,作为每个课程的唯一属性,当时还未演变出coursegroupid和courseinstanceid属性,直到我发现,似乎不是调课就会调所有周次的课程,应该给用户以选择,修改单周或修改所有周次的课程,所以我就引入了coursegroupid和courseinstanceid的属性,groupid是单一课程的所有周次的一个共有ID,用于批量的增删改查,instanceid用于单周的增删改查,其实后来我发现好像courseinstanceid的功能实在有限,不如直接使用主键id来实现,但当时项目已经走了很远,贸然修改数据库格式似乎不太合适,就留着当后续从技术上扩展功能的一个接口吧。


时间有点晚了,下次有机会再讲吧,这个项目的规模也不小,要讲完也得来日方长了