業(yè)務(wù)的抽象能力

本文主要講一下自己在平時(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)的代碼修改。

參考

[1]關(guān)于編程能力的思考

[2]抽象能力決定編程能力

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容