本文主要講一下自己在平時(shí)業(yè)務(wù)開發(fā)中的一點(diǎn)心得體會(huì),或許對(duì)新人有所借鑒
程序員能力
程序員變成能力主要的兩方面決定:
- 理論基礎(chǔ)
計(jì)算機(jī)編程和基礎(chǔ)知識(shí),也包括數(shù)學(xué)知識(shí)
- 系統(tǒng)設(shè)計(jì)能力
系統(tǒng)設(shè)計(jì)能力是對(duì)問題進(jìn)行抽象并設(shè)計(jì)出合理實(shí)現(xiàn)方案的能力
抽象意味著什么?
把一個(gè)需求看成一類需求,把一個(gè)產(chǎn)品看成一筐產(chǎn)品
- 維護(hù)成本低
怎么看待低維護(hù)或者無維護(hù)成本?真正的抽象業(yè)務(wù)能力應(yīng)該是使端對(duì)同類業(yè)務(wù)擴(kuò)展無感知,也就意味著對(duì)產(chǎn)品來說新的同業(yè)務(wù)產(chǎn)品在技術(shù)層面上面的改造應(yīng)該是無或者是很小程度上在上游的適配。
- 高可擴(kuò)
業(yè)務(wù)抽象能力能夠使的新增的業(yè)務(wù)需求在已有設(shè)計(jì)中可以做到很高的可擴(kuò)展性,稍微增加一些業(yè)務(wù)抽象邏輯即可適配。
- 高開發(fā)成本(首次)
如果對(duì)一個(gè)業(yè)務(wù)需求都去做一次抽象,毋庸置疑會(huì)增加首次的開發(fā)成本,但隨之帶來的是高可擴(kuò)和低維護(hù)。這是一個(gè)開發(fā)在日常業(yè)務(wù)中需要自己衡量的。
- 高嘲諷
這個(gè)主要是在業(yè)務(wù)開發(fā)進(jìn)行抽象的時(shí)候帶來的一些問題,一般都是因?yàn)樵谑状伍_發(fā)的時(shí)候需要額外的開發(fā)成本。經(jīng)常會(huì)聽到一些反面的聲音,會(huì)懷疑業(yè)務(wù)上拓展的能力以及額外的開發(fā)成本所帶來的反感。因?yàn)闃I(yè)務(wù)的抽象是會(huì)帶來額外的理解成本的。
抽象的妥協(xié)
每個(gè)業(yè)務(wù)開發(fā)程序員,都需要去帶著這樣的抽象思考去看待每一個(gè)需求,把一個(gè)需求看成一類需求,把一個(gè)產(chǎn)品看成一筐產(chǎn)品。因?yàn)榧词篃o法從真正業(yè)務(wù)上做到抽象,也可以在代碼層面做一層抽象。這種抽象在我日常開發(fā)中顯而易見,也正是因?yàn)檫@樣的先見之明,在后續(xù)的一些業(yè)務(wù)對(duì)接上占據(jù)了很大的優(yōu)勢(shì)。上面說到過,抽象肯定會(huì)帶來額外的開發(fā)成本,量力而行。一些業(yè)務(wù)可能并不明確或者抽象依賴對(duì)后端接口的設(shè)計(jì)。這些情況下,都是可以做首次抽象妥協(xié)的,先做一個(gè)版本試一下。把抽象作為下一次的迭代任務(wù)有時(shí)候也是一種明智之舉。
其他的思考
- 局部抽象
對(duì)于一些業(yè)務(wù)鏈路特別長,綜合考慮后覺得整條線要打通的話涉及部分之多可能會(huì)帶來產(chǎn)品的延期,那么就可以盡量做到局部的抽象,尤其是一些鏈路特別長的業(yè)務(wù)需求,局部抽象能力可以讓業(yè)務(wù)具有相對(duì)較高的可擴(kuò)展性。下面舉一個(gè)具體例子 - 搭售超級(jí)會(huì)員:
超級(jí)會(huì)員這個(gè)業(yè)務(wù)比較復(fù)雜,復(fù)雜的原因是其涉及模塊較多,鏈路較長。分別從菜單(導(dǎo)購模塊)到籃子(籃子模塊),再到結(jié)賬頁(BK模塊),這樣一條長的鏈路如果在首次開發(fā)的時(shí)候直接做到對(duì)具體業(yè)務(wù)的抽象是非常困難的,其中涉及不光是客戶端的程序設(shè)計(jì),也包括后端接口的抽象設(shè)計(jì)。因此當(dāng)時(shí)折中的方案是做到下游(籃子,結(jié)賬也)的局部抽象,放棄導(dǎo)購作為上游業(yè)務(wù)端的營銷業(yè)務(wù)的抽象。具體的程序代碼不在此贅述,簡單的描述一下籃子和結(jié)賬頁。
在開發(fā)結(jié)束后,籃子作為一個(gè)食物緩存的容器,原本只保存一些食物和一些活動(dòng)信息。那么對(duì)于超級(jí)會(huì)員產(chǎn)品被接入到籃子中,如果理解成一種搭售產(chǎn)品被加入到籃子中,那么搭售產(chǎn)品的就應(yīng)該和食物平等的存在。而籃子也不需要去關(guān)注具體的搭售產(chǎn)品是什么,對(duì)于籃子來說超級(jí)會(huì)員的籃子加購其實(shí)就是一個(gè)具體id的加入并透?jìng)鞯浇Y(jié)賬頁(BK模塊),結(jié)賬頁再把該List<id>作為參數(shù)傳入接口??梢栽O(shè)想一下,當(dāng)搭售產(chǎn)品業(yè)務(wù)擴(kuò)展后,我可能都不需要去籃子模塊和BK模塊做相應(yīng)的代碼修改。