電票是17年上線的一個(gè)項(xiàng)目叶骨,主要功能比較簡單茫多,由兩個(gè)主要部分組成,一個(gè)是電票的支付單忽刽,一個(gè)是電票天揖,功能列表如下。
開發(fā)過程
數(shù)據(jù)表
項(xiàng)目按照以往的經(jīng)驗(yàn)跪帝,先設(shè)計(jì)需要的表結(jié)構(gòu)今膊,其中包括支付單關(guān)聯(lián)以及電票、電票請求三張表(參考了之前類似項(xiàng)目的經(jīng)驗(yàn))伞剑,并在線下庫新建了表以及表的DO模型斑唬、DAO操作等,并根據(jù)分工每人負(fù)責(zé)一個(gè)模塊的開發(fā)(一共有三人小團(tuán)隊(duì)),直到將近兩兩聯(lián)調(diào)時(shí)突然發(fā)現(xiàn)少了部分?jǐn)?shù)據(jù)赖钞,由于關(guān)聯(lián)表的操作,模型等都已經(jīng)實(shí)現(xiàn)了聘裁,如果在這個(gè)表中修改雪营,項(xiàng)目的時(shí)間肯定來不及,這個(gè)時(shí)候只好新增了一張表衡便,然后再跟關(guān)聯(lián)表通過數(shù)據(jù)關(guān)聯(lián)起來献起,將本來只需要一張表完成的功能拆成了兩張,大大的增加了系統(tǒng)的復(fù)雜度镣陕。
業(yè)務(wù)邏輯
業(yè)務(wù)邏輯采用的是事務(wù)腳本的方式谴餐,一個(gè)電票的管理類將近1600行,所有的邏輯都是按照業(yè)務(wù)規(guī)則平鋪呆抑,例如當(dāng)處理來票時(shí)岂嗓,會(huì)先生成一個(gè)票據(jù)DO,然后嘗試插入數(shù)據(jù)庫鹊碍,插入成功之后會(huì)發(fā)送消息厌殉;關(guān)聯(lián)票據(jù)也類似,校驗(yàn)一系列業(yè)務(wù)規(guī)則之后更新數(shù)據(jù)庫并發(fā)消息侈咕。
在第一期項(xiàng)目中這些邏輯也還好公罕,并不算特別復(fù)雜,但是隨著需求的不斷新增耀销,例如加入商票的邏輯楼眷,加入了系統(tǒng)自動(dòng)核銷的邏輯,加入部門隔離的邏輯熊尉;電票管理類的職責(zé)也越來越多罐柳,需求的響應(yīng)也變的越來越慢。
回顧
如果說從新來一次的話帽揪,有哪些可以改進(jìn)的地方呢硝清?
首先說數(shù)據(jù)表遺漏的問題,最近參加了一個(gè)培訓(xùn)转晰,里面有一課講的比較好芦拿,說的是自頂向下,意圖編程查邢,測試先行蔗崎,與TDD類似。自頂向下是指從上層的語義開始而不是從數(shù)據(jù)表開始扰藕,因?yàn)樯蠈拥恼Z義更加具有確定性缓苛,因此出錯(cuò)的幾率更低,在真正需要的時(shí)候再來設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)與表結(jié)構(gòu)。再多說一次TDD未桥,工作的這些年中發(fā)現(xiàn)沒有一個(gè)團(tuán)隊(duì)在實(shí)行TDD的笔刹,可能是系統(tǒng)本身復(fù)雜度不夠高,認(rèn)為TDD開發(fā)效率不高冬耿,也可能是沒有這方面的意識(shí)等舌菜。不過從我之前實(shí)踐過的一個(gè)項(xiàng)目來看,效果還是不錯(cuò)的亦镶,一方面可以保證系統(tǒng)質(zhì)量日月,更重要的是可以強(qiáng)制去更多的思考系統(tǒng)的結(jié)構(gòu),例如需要去進(jìn)行接口的mock缤骨,這樣設(shè)計(jì)出來的系統(tǒng)天然就具有更好的擴(kuò)展性爱咬。
其次如何面對業(yè)務(wù)的變化,隨著業(yè)務(wù)規(guī)則的不斷變更绊起,對系統(tǒng)之前的一些邏輯帶來了挑戰(zhàn)精拟。在一些實(shí)踐場景下可能就通過ifelse來疊加上去,導(dǎo)致系統(tǒng)越來越復(fù)雜虱歪。最近參加的培訓(xùn)中也談到了這個(gè)問題串前,再加上之前內(nèi)網(wǎng)中的文章結(jié)合來看,可以開始把應(yīng)用層做厚实蔽,領(lǐng)域模型做薄荡碾,然后隨著編碼的深入,將確定性的邏輯移到領(lǐng)域中局装;當(dāng)新規(guī)則打破之前的領(lǐng)域邏輯時(shí)坛吁,再進(jìn)行重構(gòu)去適應(yīng)。
其他
回顧中的一些想法還并沒有去實(shí)踐铐尚,還需要一些項(xiàng)目去證實(shí)或證偽拨脉。