新入職一家公司,項(xiàng)目是從外包公司接回來(lái)的,如大家常見(jiàn),代碼亂,問(wèn)題多。
正向邏輯走不通,還有很多功能未完善,連玩具都算不上。而上線日期又近在眼前。
據(jù)在濟(jì)南交接的同事分享,外包的iOS曾坦言:代碼你們拿回去得慢慢優(yōu)化。

這句話好有深意。
我還有一個(gè)小伙伴,現(xiàn)在代碼到了我倆手上,除了盡快完成剩余的開發(fā)工作,工程里還藏著多到數(shù)不清的bug。

既然受任于公司初創(chuàng)之際,奉命于代碼崩潰之間。
按照工作習(xí)慣,先畫出一張思維導(dǎo)圖。

就是這么簡(jiǎn)單,基本業(yè)務(wù)走通就可以。
然而時(shí)間有限,開發(fā)要繼續(xù),bug要改,框架得整理(不整理根本沒(méi)法寫)。

業(yè)務(wù)要跑通,Model層必須挨第一刀。
現(xiàn)在是用HandyJSON解析數(shù)據(jù),網(wǎng)絡(luò)請(qǐng)求是Alamofire+Moya。
有Moya規(guī)范,請(qǐng)求相對(duì)好些。唯獨(dú)數(shù)據(jù)模型,就像是一群沒(méi)人管的野孩子,沒(méi)人認(rèn)識(shí),不知道他們干啥。

語(yǔ)文老師曾經(jīng)說(shuō)過(guò),遇到事情我們要學(xué)會(huì)借古通今。
以銅為鑒,可以正衣冠;以古為鑒,可知興替;以人為鑒,可明得失。
想了一下古人,還真有這樣一個(gè)故事:
丁渭挖溝:
公元1015年,北宋京城汴京(今河南省開封市)皇宮失火,將皇宮燒成廢墟.
宋真宗命丁渭主持修復(fù)皇宮的工程.
丁渭首先把皇宮前的大街開挖成一條大溝,取土燒磚、燒瓦;
再把京城附近的沛水引進(jìn)大溝內(nèi),使運(yùn)送建筑材料的船只直抵宮前;
竣工后又把廢棄的磚瓦和廢土填人溝內(nèi),然后修復(fù)原來(lái)的大街.
這一統(tǒng)籌施工安排,可謂“舉一役而三得”
順著故事結(jié)構(gòu),可以把它轉(zhuǎn)換成以下JSON:
丁渭挖溝:{
????????起因:公元1015年,北宋京城汴京(今河南省開封市)皇宮失火,將皇宮燒成廢墟
????????背景:宋真宗命丁渭主持修復(fù)皇宮的工程.
? ? ? ? 內(nèi)容:{
????????????????準(zhǔn)備:丁渭首先把皇宮前的大街開挖成一條大溝,取土燒磚、燒瓦
????????????????施工:再把京城附近的沛水引進(jìn)大溝內(nèi),使運(yùn)送建筑材料的船只直抵宮前
????????????????竣工:竣工后又把廢棄的磚瓦和廢土填人溝內(nèi),然后修復(fù)原來(lái)的大街
????????}
????????總結(jié):這一統(tǒng)籌施工安排,可謂“舉一役而三得”
}
目前我的項(xiàng)目也有相似之處,比如:事情很重要,時(shí)間很緊迫,只重構(gòu)Model層。

吃了幾包豆腐干、幾塊旺旺雪餅、兩個(gè)小西瓜、三根辣條之后,靈感來(lái)了。
根據(jù)上方JSON,Model的重構(gòu)工作提煉成了這樣:
Model重構(gòu):{
????????起因:剛?cè)肼?,代碼亂,寫不下去了
????????背景:項(xiàng)目要上線,老子想表現(xiàn)
????????內(nèi)容:{
? ? ? ? ? ? ? ? 準(zhǔn)備:做一套無(wú)縫過(guò)渡的替代方案,用命名空間劃分職能,用別名兼容調(diào)用Model的代碼
????????????????施工:把這些調(diào)皮的孩子們都抓到一塊,起個(gè)好名字,搞清楚他們干啥
????????????????竣工:沒(méi)人要的野孩子就地kill,多胞胎要kill到只剩一個(gè)
????????}
????????總結(jié):事后還可以寫一篇裝逼文
}
重點(diǎn)就是“內(nèi)容”里的三步。
之前亂七八糟的Model就不放圖了,我也沒(méi)截。
直接進(jìn)入重構(gòu):
代碼功能劃分是根據(jù)不同業(yè)務(wù)來(lái)寫的

然后用extension給這些功能模塊填進(jìn)Model


在外面調(diào)用這些Model時(shí),順著M一直用點(diǎn)語(yǔ)法補(bǔ)全寫下去就OK了

為了更方便查看,可以給Model上方添加 /// 格式的注釋。
替換的過(guò)程中,為了快速高效的完成整理,其他地方的代碼一律不動(dòng)。
最后一個(gè)小問(wèn)題,類名換了,其他地方代碼不動(dòng)?
對(duì)滴!因?yàn)槲矣昧藅ypealias 給他們都單獨(dú)創(chuàng)建了別名。
我的小伙伴也在開發(fā),為了防止git提交沖突或者引起別的地方bug,非model的文件我先不動(dòng)。

數(shù)據(jù)模型就是這樣一個(gè)個(gè)整理的,將在后面工作中逐步把別名替換掉。

本篇END--