藉機系統項目記錄

       做這個項目的緣由是科室內部經常不斷的藉手機,藉着藉着手機不知道跑哪去了,很是頭疼。後來科長讓一個人來統一管理手機。借的人必須登記,這樣手機在誰那一目瞭然。隨着項目越來越多,手機也越來越多。管理手機的人每天都要應付藉手機和還手機的人,使得自己沒法安心工作。我看在眼裏也覺得好煩,最近閒了下來,我就打算做一款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界面調整,測試用例更新等。另外一些輔助功能有空也會更新上去,比如用戶反饋、軟件更新、文章等等。

      這個項目也即將告一段落,原本打算新人來了,帶帶他們一起開發,但新人來的比較慢,後面有的是項目。後面打算花點時間複習下書本知識,複習過後,準備下一個項目。已經有了點子,關於家庭業務的,敬請期待。

     



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