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