schedule4HR(1)

背景

做个课表吧。

这个想法也算是和朋友在闲聊时的儿戏话所铸就的。虽然心里早已受不了世面上课表app的社交圈。各种消息推送。。
并且自己的需求也只是想要一个干净,整洁的课表罢了。

需求

既然是做给自己用的。也是个实践自己所学知识的试验田。那么需求就可以任性一点。满足自己要求即可。(可惜自己的需求和客户一样是时不时抽风想改变的自我,在面对像面条一样的代码不想改变需求的本我以及傲娇到最后老老实实地去码代码的超我之间有着现代办公室上演的客户,码农以及项目经理之间的爱恨情仇。。。)
捂脸。。

还是乖乖地看需求吧。
如下:

  • 自动导入课表功能
  • 干净、清爽的界面以及良好的使用体验(包括周数自动变更、当前周要上的课程高亮、单双周同一时间段课程不同的需求)
  • 支持手动修改课表
  • 数据的持久化
  • 桌面插件(后续添加)

实施方案

最开始的方案

没有提前设计软件实现架构。(其实是不懂该怎么设计,说到着我又拿起了OO D&A的书装正经地看着。)
需要什么就写什么。缺什么就补什么。然后发现这个课表(除了自动导入课表以及桌面插件外)现在想起来也没什么好做的。典型的面向过程思维。(也许是之前偶尔刷算法题的原因。。。)花了几天看看安卓语法以及一些demo,然后牙牙学语般地把一个单机版的课表给实现了。

技能点

  • sqlite存储课表数据实现持久化
  • Jsoup实现模拟登陆,解析数据,将在教务系统爬到的课表数据存储为json格式,以供后续更新课表使用
  • butterknife绑定view的id
  • 用java的Calendar类里面API的基础上加以处理实现周数变更的需求。
  • 高亮部分的需求只需每一个课程实例的上课时间(需要上课的周数)与当前周做比较即可。
    - 多线程。io操作和ui操作分离。(打算用一个ArrayList存储所有的课表数据,数据修改只在ArrayList上操作,更新UI上数据也是如此,另外一个线程时刻保持ArrayList和数据库内容的同步)

    提醒自己:不要为了多线程而多线程。在随后几天实现时发现要保证数据能正常显示在UI上要用到多线程的同步,那效率就比不上单线程了。因为有线程切换的开销。不过在后面实现通过网络导入课表时可以用到多线程。这时候就算是同步,效率也是比单线程等待网络响应要来得快。

过程中的遇到的坎

由于没太多的实际开发经验。自己在码的时候就一直码,直到一个功能的实现后才编译来看运行情况。所以都是遇到很多编译错误。解决完一个又一个。但大多都是空指针的报错。能改的也就直接改了。其中有两个最让我记忆深刻。就是加载对话框后的findViewById前面要加限定名以及声明为字段的一个Vector没有实例化就直接往里面add数据了。

重构方案

刚做完一个能用的app也是有少许得意的想法。毕竟花了时间。得到成果。但不久便有重构的想法在心里了。放下了这个项目的开发。转而去看面向对象设计,设计模式之类的书。

待续。

说到这。。我现在的行为算不算偷懒不看书来这里发呆的说?