項(xiàng)目模式
描述
移動(dòng)應(yīng)用中主要?jiǎng)澐謨深?lèi)角色,側(cè)重點(diǎn)不同沿腰。具體包括:
-
監(jiān)管人員
- 可以理解為項(xiàng)目管理人員叔扼,監(jiān)管權(quán)限下有多個(gè)項(xiàng)目的監(jiān)管權(quán)限事哭。
- 監(jiān)管人員有特定的功能模塊。
- 針對(duì)不同的項(xiàng)目币励,監(jiān)管人員還有用不同的功能模塊權(quán)限慷蠕。
-
項(xiàng)目使用人員
- 具體項(xiàng)目的使用人員。主要針對(duì)其負(fù)責(zé)的項(xiàng)目(或者標(biāo)段)進(jìn)行操作食呻。
項(xiàng)目具體類(lèi)別有包括以下3大類(lèi):
- 路橋類(lèi)
- 地鐵類(lèi)
- 園區(qū)類(lèi)
項(xiàng)目的功能上具體跟項(xiàng)目掛鉤流炕,且部分功能,比如「問(wèn)題上報(bào)」仅胞、「設(shè)計(jì)圖紙」每辟、「現(xiàn)場(chǎng)巡檢」、「建設(shè)資料」要求支持離線操作干旧。
方案
將方案之前渠欺,補(bǔ)充說(shuō)明下移動(dòng)端使用的是MVMCV模式(可以理解成是MVVM模式的變種),簡(jiǎn)單理解就是將View-Model進(jìn)行分解椎眯,將一些邏輯放在controller中挠将。UI布局上使用Tabbar形式,分別表示首頁(yè)编整、功能集聚頁(yè)舔稀、待辦頁(yè)面。
程序在線/離線模式的切換掌测,基于觀察者模式來(lái)實(shí)現(xiàn)内贮。 當(dāng)網(wǎng)絡(luò)狀態(tài)發(fā)生變更的時(shí)候,可以通過(guò)主動(dòng)獲取和推送兩種方式靈活使用汞斧。
項(xiàng)目首頁(yè)模式的切換夜郁,基于狀態(tài)模式來(lái)實(shí)現(xiàn)。 比如監(jiān)管模式下粘勒,點(diǎn)擊地圖上項(xiàng)目詳情竞端,進(jìn)入項(xiàng)目模式;項(xiàng)目模式下返回到首頁(yè)時(shí)進(jìn)入監(jiān)管模式等庙睡。
-
程序(或者功能)的在線/離線模式
- 在管理程序的ViewModel事富,監(jiān)聽(tīng)網(wǎng)絡(luò)變更剑勾。變更時(shí)發(fā)通知。
- 不同用戶(hù)模式下程序在線/離線模式會(huì)根據(jù)網(wǎng)絡(luò)情況進(jìn)行反應(yīng)赵颅。
- 功能集聚頁(yè)會(huì)額外根據(jù)網(wǎng)絡(luò)變更通知即使調(diào)整功能圖標(biāo)。
- 其他:比如具體離線功能內(nèi)根據(jù)不同的模式進(jìn)行UI調(diào)整暂刘。
-
項(xiàng)目首頁(yè)的模式
- 在首頁(yè)的ViewModel饺谬,定義兩種模式。
- 監(jiān)管模式
- 項(xiàng)目模式
- 監(jiān)管人員
- 默認(rèn)監(jiān)管模式
- 切換管理項(xiàng)目時(shí)谣拣,將首頁(yè)模式調(diào)整為項(xiàng)目模式募寨。并根據(jù)不同的項(xiàng)目類(lèi)別,加載不同的項(xiàng)目首頁(yè)
- 路橋首頁(yè)
- 地鐵首頁(yè)
- 園區(qū)首頁(yè)
- 項(xiàng)目首頁(yè)返回到監(jiān)管首頁(yè)時(shí)森缠,首頁(yè)模式調(diào)整為監(jiān)管模式
- 項(xiàng)目使用人員
- 項(xiàng)目模式拔鹰,并根據(jù)不同的項(xiàng)目類(lèi)別,加載不同的項(xiàng)目首頁(yè)
- 在首頁(yè)的ViewModel饺谬,定義兩種模式。
-
功能集聚頁(yè)
- 為監(jiān)管模式定義特殊的Key贵涵。
- 項(xiàng)目模式使用約定的Key列肢。
- 功能列表根據(jù)不同的Key從緩存數(shù)據(jù)庫(kù)中獲取。
應(yīng)用中宾茂,首頁(yè)模式的切換瓷马,聯(lián)動(dòng)著不同首頁(yè)的push和pop;集聚功能頁(yè)(及其他)獲取具體功能的key變更跨晴。
離線操作
描述
程序的工作環(huán)境有時(shí)候比較特殊欧聘,比如地鐵、房屋修建端盆,經(jīng)常會(huì)用到一些比如上報(bào)工作進(jìn)度怀骤、問(wèn)題,或者是查看項(xiàng)目相關(guān)的文檔焕妙、模型等功能蒋伦,如果應(yīng)用對(duì)網(wǎng)絡(luò)有強(qiáng)需求,那么程序本身是不容易讓人接受的访敌。因此凉敲,「工程在線」在項(xiàng)目整合之處,就要求同時(shí)支持離線操作模式寺旺。
此處拿問(wèn)題上報(bào)的離線功能來(lái)舉例爷抓。通常情況下,問(wèn)題上報(bào)會(huì)涉及上傳照片/視頻阻塑、問(wèn)題類(lèi)別等多種條目蓝撇。且功能的使用存在不確定性。iOS的沙盒機(jī)制決定了我們?cè)谶M(jìn)行離線功能設(shè)計(jì)的時(shí)候陈莽,不能僅僅依靠本地?cái)?shù)據(jù)庫(kù)渤昌,還需要借助于文件操作虽抄。
方案
功能離線模式通過(guò)本地?cái)?shù)據(jù)庫(kù)和文件管理兩種方式來(lái)完成。
- 本地?cái)?shù)據(jù)庫(kù)
- 離線功能所需數(shù)據(jù)的緩存独柑。
- 比如問(wèn)題上報(bào)中涉及的位置迈窟、問(wèn)題類(lèi)別、相關(guān)人員等信息忌栅。
- 離線數(shù)據(jù)的維護(hù)车酣。
- 比如URL,HTTP請(qǐng)求方式索绪,參數(shù)湖员,所屬功能,文件夾標(biāo)識(shí)瑞驱,請(qǐng)求狀態(tài)等娘摔。
- 離線功能所需數(shù)據(jù)的緩存独柑。
- 文件系統(tǒng)
- 程序會(huì)在Library的Cache目錄下單獨(dú)建立文件夾來(lái)存放離線功能產(chǎn)生/使用的文件。
- 文件夾標(biāo)識(shí)
- 使用唯一標(biāo)識(shí)唤反,程序使用yyyyMMddHHmmss格式凳寺。
- 在使用到照片/視頻時(shí),創(chuàng)建文件夾拴袭。且將過(guò)程中用到的文件移動(dòng)/復(fù)制到該目錄下读第。
- 在線模式功能提交成功后,會(huì)刪除該文件夾及內(nèi)部文件拥刻。
離線模式下怜瞒,點(diǎn)擊保存就是將相關(guān)的URL、HTTP請(qǐng)求方式般哼、參數(shù)吴汪、文件標(biāo)識(shí)存入離線數(shù)據(jù)庫(kù)中。
當(dāng)程序處于網(wǎng)絡(luò)狀態(tài)下蒸眠,程序會(huì)后臺(tái)上傳離線數(shù)據(jù)庫(kù)中的相關(guān)請(qǐng)求數(shù)據(jù)漾橙。此時(shí)考慮到多文件、多請(qǐng)求上傳會(huì)影響程序性能楞卡。程序在處理離線任務(wù)上傳時(shí)霜运,對(duì)網(wǎng)絡(luò)請(qǐng)求進(jìn)行了專(zhuān)門(mén)的控制。
- 每次只有一個(gè)離線任務(wù)進(jìn)行上傳蒋腮。
- 上傳完成后淘捡,刪除數(shù)據(jù)庫(kù)及文件緩存中相關(guān)的數(shù)據(jù)
- 統(tǒng)計(jì)并提示最終離線任務(wù)結(jié)果。針對(duì)失敗的任務(wù)池摧,由用戶(hù)自行決定是放棄還是后續(xù)上傳焦除。
項(xiàng)目總覽
描述
部分用戶(hù)(比如領(lǐng)導(dǎo)、項(xiàng)目管理人員)會(huì)比較關(guān)心項(xiàng)目整體情況作彤,比如進(jìn)度膘魄、問(wèn)題乌逐、投入等信息。我們的設(shè)計(jì)師對(duì)項(xiàng)目總覽功能頁(yè)面設(shè)計(jì)出了很多手勢(shì)相關(guān)的操作创葡。功能整體上下滑動(dòng)浙踢,內(nèi)部左右滾動(dòng)。
首先UI本身并不復(fù)雜灿渴,但是好的體驗(yàn)就需要用心去做了成黄。比如,切換不同類(lèi)別頁(yè)面時(shí)逻杖,數(shù)據(jù)的預(yù)加載。不同類(lèi)別的數(shù)據(jù)如何組織等思瘟。
方案
整個(gè)項(xiàng)目總覽頁(yè)面使用UIPageViewController來(lái)實(shí)現(xiàn)荸百,右側(cè)的UIPageControl則通過(guò)實(shí)現(xiàn)UIPageViewController的相關(guān)協(xié)議來(lái)更新。在每個(gè)頁(yè)面內(nèi)部滨攻,根據(jù)具體的類(lèi)別及數(shù)據(jù)源來(lái)更好的表現(xiàn)/維護(hù)代碼够话。為了達(dá)到更好的用戶(hù)體驗(yàn),總覽功能使用了一個(gè)viewModel來(lái)維護(hù)光绕。
- 總體
- 在UIPageViewController的Controller中女嘲,控制導(dǎo)航欄、PageControl诞帐。
- 在總覽頁(yè)退出時(shí)欣尼,取消各個(gè)子頁(yè)面中未完成的網(wǎng)絡(luò)請(qǐng)求
- 子頁(yè)面
- 為了保證數(shù)據(jù)的展示,建立一定的規(guī)則
- 比如為每個(gè)請(qǐng)求提供有3次重試的機(jī)會(huì)停蕉。這樣當(dāng)用戶(hù)滑動(dòng)過(guò)快時(shí)(或者某個(gè)接口太慢用戶(hù)直接滑過(guò)相關(guān)頁(yè)面時(shí))愕鼓,程序接口可以繼續(xù)運(yùn)行
- 針對(duì)不同數(shù)據(jù)源,選擇合適的處理方法
- 比如進(jìn)度對(duì)比頁(yè)慧起,需要支持多種攝像頭設(shè)備現(xiàn)場(chǎng)菇晃。使用策略模式來(lái)針對(duì)不同設(shè)備進(jìn)行登錄/退出、視頻通道等適配
- 大華硬盤(pán)錄像機(jī)設(shè)備
- 大華視頻服務(wù)器設(shè)備
- 候炯罚康威視硬盤(pán)錄像機(jī)設(shè)備
- 夯撬停康威視視頻服務(wù)器設(shè)備
- 比如進(jìn)度對(duì)比頁(yè)慧起,需要支持多種攝像頭設(shè)備現(xiàn)場(chǎng)菇晃。使用策略模式來(lái)針對(duì)不同設(shè)備進(jìn)行登錄/退出、視頻通道等適配
- 為了保證數(shù)據(jù)的展示,建立一定的規(guī)則