借机系统项目记录

       做这个项目的缘由是科室内部经常不断的借手机,借着借着手机不知道跑哪去了,很是头疼。后来科长让一个人来统一管理手机。借的人必须登记,这样手机在谁那一目了然。随着项目越来越多,手机也越来越多。管理手机的人每天都要应付借手机和还手机的人,使得自己没法安心工作。我看在眼里也觉得好烦,最近闲了下来,我就打算做一款APP来管理这堆手机,希望能使管理员能轻松点,而且每个人都可以安装APP来查看当前所有手机的状态,借手机只要操作APP即可,管理员看到申请,审批即可,APP会帮你管理手机,岂不是很方便?
       做APP总得有点收获才做吧,想想之前自己写的的APP,代码结构很乱,偶合性很高,让人感觉很不舒服。以前总喜欢追求速度,追求完成功能的成就感,等做完了感觉很失落,迷茫,失去了方向感。然而做这款APP我要学会慢,边写边总结。采用TDD模式开发,让自己的代码结构清晰,高内聚低耦合。原本打算在科室内找个人跟我一块做,因为结对编程的力量还是很大的。后来想想还是算了,先一个人从头到尾来完成这个项目,成功的话,下一个项目有经验了再找人一起开发。
       想法很好,自己的项目就这样启动了。
       首先准备一下APP用到的开发模式:TDD模式开发+MVP设计模式+GREENDAO数据库框架+RETROFIT网络框架+UI框架+AS2.1
       然后画了一下大致的UI流程图,并对数据库表的设计。
       开始写单元测试,主要是针对presenter层的功能函数测试。对数据库的增删改查等其他函数做测试。网络相关的单元测试还没开始写,网络这块比较头大,打算先用云服务器来测试下实现效果,实在不行就得学习PHP来做服务器了,一步一步来,不着急,若有这个机会去学服务器开发,真是太棒了,想想就激动。
       写了目前能想到的测试用例后,开始引入GREENDAO框架来对数据库进行设计,这个框架比较轻量级,没有用注解和反射,性能很好,口碑不错,必须会用。
       然后是MVP设计的搭建,mvpview目录用来存VIEW的实现接口,Activity和Fragment都要实现自己的接口,在presenter中会关联对应的接口,presenter会中处理业务逻辑和功能,最后通过VIEW接口回调给Activity和Fragment做UI方面的操作。presenter层起到承上启下的作用,它将VIEW和MODEL完全隔离开。
       接着加入了通用适配器,方便适配器的创建。adapter目录的适配器还挺多的。从列表控件来分,有abslistview和recyclerview适配器,主要是recyclerview控件用的适配器必须继承它内部的适配器,对ViewHolder做了封装。从用途来分,有普通适配器、多item适配器(如聊天界面)、Pull适配器(添加了上拉加载)。
       然后添加了PullRecycler控件,里面含有SwipeRefreshLayout和RecyclerView,将下拉刷新和上拉加载功能集与一身。接着添加BaseListFragment来初始化刷新相关的必备操作。

       UI的工作先准备到这里,在网上找到了Bmob云服务器,下载SDK和查阅了开发文档,接着开始建立手机管理表和借手机的表。创建表之后,就开始表的增删改查。测试过程中发现服务器的表的每一项id是String类型的,而本地数据库的表确是long类型的,无法对应,折腾半天,还是没把id类型统一起来,只能在本地数据库表里面再添加一个String类型的id字段来对应服务器表的id了。

       接着开始开发第一个功能:添加手机。该功能的难点在于数据的同步,这个问题试了很多解决方案,如:先从网络获取,有数据的话就想数据缓存到本地数据库,没有数据的话就获取本地数据。这样的话会不会有点浪费流量,每次都要先从网络获取,如果先从本地数据库获取,再从网络获取呢?这样感觉也不好,本地数据太久了怎么办。后来网上找到了用RXJAVA来解决该问题的解决方案,我记录在了另一篇文章里面了。

       在做添加手机功能的过程中,添加头像的功能很是麻烦,头像的来源分为拍照和相册,我也见过很多应用都做过,于是先在网上找找有没有这样的案例,在github上找到一个很好的获取头像的库,它里面有自己设计的剪裁界面,比较好看。可惜的是只有从相册获取,于是我就打算把这个库优化一下,将拍照的功能也添加进去。在这里遇到一个权限的问题,在5.1手机上拍照能获取图片,但在6.0上就报了权限的问题。解决方案就是添加外部存储的权限。Bbom上也有现成的类来处理。另外需要注意的是,在添加手机之前,先要将头像上传到服务器,上传成功会返回头像的url,将该url添加到手机的表中,再调用添加手机的接口将数据上传到服务器。关于头像的功能花了一个礼拜的时间终于搞定了。

       花了将近两个礼拜的时间,实现完了添加手机和显示手机的功能后,心里原本打算接着开发借手机的功能。但一想借手机得有个用户吧,于是打算把用户管理的功能先做起来。比较方便的是,Bmob服务器默认为我们做了user这张表,而且很多接口都在BbomUser类里面,很方便。登录、注册、注销、头像,这些都是用户管理功能要做的。用户管理的功能也做了一个礼拜。

       用户管理功能完成后,终于可以开始借手机的功能了,借手机的页面让我很是头像,改来改去,就是感觉不满意。原本打算屏幕上方是手机的信息,手机下方的借过手机的人员信息,人员信息用recyclerview,并且向上滑的时候,手机信息会向上滑出屏幕。这个滑动效果始终没做出来,于是先不让滑动吧。更麻烦的来了,我在想,如果同时很多人借手机肯定会有多线程的问题,可能会遇到这样的情况:手机已经借完了,却还可以借手机。这个问题思考了好多天,在Bmob开发文档上找到了一个强大的功能,就是可以监听服务器数据库的变化,类似观察者模式一样,只要注册了,一旦数据有变化,观察者就是相应变化。这个功能可能缓解上面多线程的问题,另外我想到了后面要做一个管理员的功能,大意就是在借手机的界面,点击借手机,其实并非真正的借到手机了,而是给管理员申请手机,申请单子提多了也无所谓,看管理员那边审批了,如果没手机了,审批肯定就会失败。

      自从上面有了监听服务器数据库变化的功能后,我之前的很多接口都要修改,获取手机列表和借手机名单都可以直接从本地数据库获取即可,只要服务器数据变化了,就会同步数据到本地数据库,这样的话就保证本地数据库和服务器数据库一致。数据库的同步我放在了一个服务里面。同步功能确实很重要,经过大量的测试,该功能还算稳定。

      同步功能完成后,第一阶段算是完结了。第一阶段做的工作很多:1、UI设计;2、数据库设计;3、测试用例;4、MVP框架搭建;5、GreenDao数据库;6、Bmob云服务;7、添加手机和显示手机列表;8、借手机;9、数据监听与同步;10、RXjava异步加载;11、通用adapter;12、头像处理等等。

      第二阶段主要针对管理员功能,在用户表里面添加管理员标志位,开启标志位后,界面上就会出现管理员的功能,另外添加手机按钮也会显示。管理员功能包括添加手机、删除编辑手机、审批借手机、审批归还手机。另外我的手机也在这个阶段开发。

      添加手机和编辑删除手机在第一个阶段已经完成了,只是在这个阶段做了管理员的限制。

      管理员界面中包含审批借手机和审批归还手机。在借手机的表里面添加手机状态标志位。审批借手机就是修改标志位,审批归还手机就是删除该数据。

      我的手机页面就是根据字段查询了。另外添加点击申请和点击归还操作。

      整个流程已经基本打通:申请手机-》审批手机-》申请归还手机-》审批归还手机。多次测试没问题。

      后面就是优化工作了,主要解决内存泄漏问题,第一次启动白屏很长问题,添加了右滑退出功能,用lint工具检查代码规范问题,部分UI界面调整,测试用例更新等。另外一些辅助功能有空也会更新上去,比如用户反馈、软件更新、文章等等。

      这个项目也即将告一段落,原本打算新人来了,带带他们一起开发,但新人来的比较慢,后面有的是项目。后面打算花点时间复习下书本知识,复习过后,准备下一个项目。已经有了点子,关于家庭业务的,敬请期待。

     



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章