红包功能的开发总结
兩天內(nèi)對(duì)項(xiàng)目中的紅包展示邏輯及UI做了大調(diào),總結(jié)下其中的經(jīng)驗(yàn)以及發(fā)現(xiàn)的編程中的問(wèn)題:
先說(shuō)下問(wèn)題:
多余時(shí)間消耗的原因以及解決方案:
兩天時(shí)間中,除去編碼、調(diào)試以及優(yōu)化外,其中有三處耗時(shí)的地方可以優(yōu)化
1,前期的交互邏輯模糊。
在沒(méi)有準(zhǔn)確明確各個(gè)頁(yè)面如何跳轉(zhuǎn),每個(gè)頁(yè)面跳轉(zhuǎn)攜帶什么數(shù)據(jù),頁(yè)面展示需要請(qǐng)求什么數(shù)據(jù),回調(diào)會(huì)傳遞會(huì)什么數(shù)據(jù)前,匆忙編碼,導(dǎo)致過(guò)程中邏輯大量修改。
2,沒(méi)有準(zhǔn)備好測(cè)試工具。
調(diào)試中,多次錯(cuò)過(guò)僅此一次的測(cè)試機(jī)會(huì),導(dǎo)致在特有條件下沒(méi)有捕獲流程,狀態(tài)信息。
現(xiàn)在的紅包測(cè)試依賴于真實(shí)的付費(fèi),以及多賬號(hào)之間的切換。測(cè)試過(guò)程復(fù)雜耗時(shí)。
在只針對(duì)于邏輯、UI的調(diào)整,不涉及接口的情況下,應(yīng)對(duì)各個(gè)狀態(tài)的model進(jìn)行持久化存儲(chǔ),便于調(diào)試時(shí)隨意選擇要展示的狀態(tài)。
3,程序中細(xì)節(jié)可以記錄,調(diào)整。
比如case的排序,常查看的方法所在行數(shù)。在大量代碼的文件中查找方法、剛剛的代碼位置也是比較麻煩的。
還要熟練配合快捷鍵以及多tab的切換。
tab頁(yè) 排列方式:
從左到右依次是小控件 封裝View 控制器 配置頁(yè)
快捷鍵:
搜索 “iOS開發(fā)快捷鍵,看這一篇就足夠了” 比較全
紅包展示邏輯(從點(diǎn)擊紅包開始):
1,準(zhǔn)備紅包展示需要的基礎(chǔ)數(shù)據(jù),紅包類型,紅包狀態(tài)
基礎(chǔ)數(shù)據(jù)存在于點(diǎn)擊控件中,頭像,名稱,祝福語(yǔ)等
紅包類型存在于點(diǎn)擊控件中 ,一般也在基礎(chǔ)數(shù)據(jù)中,比如隨機(jī)紅包,平均紅包,名片紅包等
紅包狀態(tài)需要臨時(shí)獲取,這樣才能取到最新的狀態(tài),包括:可以搶,已搶,被他人搶完了,已過(guò)期 只有這四個(gè)
2,展示紅包
普通紅包的展示僅僅需要基礎(chǔ)數(shù)據(jù),類型和狀態(tài)
名片紅包在基礎(chǔ)數(shù)據(jù)外,還需要單獨(dú)獲取名片的信息(名片的信息需要通過(guò)紅包ID 獲取)這里的邏輯是,先展示View的整體,對(duì)內(nèi)部view的數(shù)據(jù)臨時(shí)獲取,這樣可以提高外層view的展示速度。
3,回調(diào)的處理,代理的方式要優(yōu)于block
設(shè)置代理不需要在協(xié)議類中,但是block一般要在view的添加類中,否則需要類之間的調(diào)用傳遞消息。
block不宜多層嵌套,這樣邏輯代碼糅合在一起不易理解。
delegate中一個(gè)方法處理一個(gè)邏輯更清晰。多協(xié)議比多block更容易維護(hù)。
4, 搶紅包動(dòng)作的處理。
最終搶紅包結(jié)果基于狀態(tài),因此觸發(fā)搶紅包動(dòng)作時(shí),需要請(qǐng)求最新狀態(tài),根據(jù)最新狀態(tài)進(jìn)行展示
對(duì)于名片紅包,搶之前需要判斷自己的名片信息,如果沒(méi)有名片還需要編輯,有完整信息后才可以獲取紅包,交換名片。
發(fā)紅包規(guī)則(對(duì)微信的學(xué)習(xí),并做了調(diào)整) :
優(yōu)先級(jí):
個(gè)數(shù),單個(gè)紅包區(qū)間,金額
單個(gè)紅包在0.01~200之間
三種提示語(yǔ):
一次最多發(fā)100個(gè)紅包(個(gè)數(shù)提示)
單個(gè)紅包金額不可超過(guò)200元(金額提示)
單次支付總額不可超過(guò)20000元(金額提示)
輸入限制
1,金額
不得大于99999
不得 0X、0.X. 、.X
2,個(gè)數(shù)
不得先輸入0
不得大于999
合規(guī)性判斷
1,編輯金額時(shí):
無(wú)個(gè)數(shù){
金額 不得大于20000
}
有個(gè)數(shù){
優(yōu)先判斷個(gè)數(shù)的合規(guī)
if(個(gè)數(shù)不合規(guī)){// 個(gè)數(shù)的優(yōu)先級(jí)要高于金額
提示個(gè)數(shù)錯(cuò)誤
}else{
單個(gè)金額 不得大于200 or 小于 0.01 合規(guī)性判斷針對(duì)金額
}
}
2,編輯個(gè)數(shù)時(shí):
if(個(gè)數(shù) <= 100){
無(wú)金額{
}else{
// 有金額
單個(gè)金額 不得大于200 or 小于 0.01 合規(guī)性判斷針對(duì)金額
}
}else{
// 個(gè)數(shù) 大于 100
提示個(gè)數(shù)的 超過(guò)100
}
對(duì)于合規(guī)性判斷的處理是比較復(fù)雜的,在邏輯沒(méi)有梳理清楚后會(huì)出現(xiàn)很多問(wèn)題并且不宜維護(hù)
于是我設(shè)計(jì)了另一種報(bào)錯(cuò)的策略,保持權(quán)重最大的錯(cuò)誤:
給每個(gè)錯(cuò)誤設(shè)置權(quán)重,保持權(quán)重最大的錯(cuò)誤,在所有邏輯判斷完成后,統(tǒng)一進(jìn)行提示。
該策略邏輯清晰,最終輸出統(tǒng)一,容易控制。
測(cè)試代碼稍后上傳github: 紅包封裝
https://github.com/Huaida/TestFunction_OC
總結(jié)
- 上一篇: MIME协议
- 下一篇: npm包之accepts---解决不同A