日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

手把手教你,如何先梳理業(yè)務(wù)邏輯再寫代碼

來源: 責(zé)編: 時(shí)間:2023-09-18 21:40:53 316觀看
導(dǎo)讀一、業(yè)務(wù)邏輯與代碼代碼是需求邏輯的一種展現(xiàn)形式:需求文檔是業(yè)務(wù)邏輯的一種展現(xiàn)形式,而代碼不過是業(yè)務(wù)邏輯的另一種表現(xiàn)形式;如果邏輯本身有問題,那么它的各種展示形式自然也是錯(cuò)的,所以寫代碼前應(yīng)該先思考清楚業(yè)務(wù)邏輯。

一、業(yè)務(wù)邏輯與代碼

  • 代碼是需求邏輯的一種展現(xiàn)形式:需求文檔是業(yè)務(wù)邏輯的一種展現(xiàn)形式,而代碼不過是業(yè)務(wù)邏輯的另一種表現(xiàn)形式;如果邏輯本身有問題,那么它的各種展示形式自然也是錯(cuò)的,所以寫代碼前應(yīng)該先思考清楚業(yè)務(wù)邏輯。
  • Review代碼很多時(shí)候是邏輯問題:在Review代碼經(jīng)驗(yàn)中發(fā)現(xiàn):混亂的代碼并不僅僅是代碼編寫技藝問題,很多時(shí)候是因?yàn)檫壿嫑]有梳理清楚。邏輯混亂,自然代碼也混亂。梳理清楚業(yè)務(wù)邏輯,就為代碼打下了良好的基礎(chǔ)。當(dāng)然業(yè)務(wù)邏輯梳理清楚后,業(yè)務(wù)邏輯到代碼的映射依然有可能出問題,這是編程技藝要解決的問題。下面通過一個(gè)簡單的例子來演示這個(gè)過程:

CBm28資訊網(wǎng)——每日最新資訊28at.com

二、業(yè)務(wù)需求示例

我們要做一件事情doSomething:CBm28資訊網(wǎng)——每日最新資訊28at.com

  • 第一步先做 A,A 過程要先執(zhí)行 a1, 然后執(zhí)行 a2, 然后執(zhí)行 a3 這三個(gè)子過程。
  • 第二步再做 B,B 過程需要執(zhí)行 b1,然后 b2 這兩個(gè)子過程。

這個(gè)示例邏輯的圖形表述如下:是一個(gè)樹,包含樹的根,枝干,和葉子。CBm28資訊網(wǎng)——每日最新資訊28at.com

CBm28資訊網(wǎng)——每日最新資訊28at.com

例子是有通用性的,現(xiàn)實(shí)世界的任何事情或業(yè)務(wù)都可以用類似的樹形結(jié)構(gòu)來表述。CBm28資訊網(wǎng)——每日最新資訊28at.com

CBm28資訊網(wǎng)——每日最新資訊28at.com

三、正確的代碼實(shí)現(xiàn)

1. 和邏輯樹映射的代碼樹

正確的代碼結(jié)構(gòu)應(yīng)該是和邏輯映射的,代碼結(jié)構(gòu)如下:CBm28資訊網(wǎng)——每日最新資訊28at.com

CBm28資訊網(wǎng)——每日最新資訊28at.com

我們真實(shí)寫代碼的時(shí)候,一般并不會直接寫出如上結(jié)構(gòu),而是會先寫出「3.2 代碼塊 + 注釋」的結(jié)構(gòu)來。CBm28資訊網(wǎng)——每日最新資訊28at.com

2. 代碼塊 + 合理注釋

如下代碼通過代碼塊來映射邏輯,上面圖中的子方法對應(yīng)代碼中的注釋。CBm28資訊網(wǎng)——每日最新資訊28at.com

void doSomething(){    //A    a1邏輯偽代碼.....;//a1    a2邏輯偽代碼.....;//a2    a3邏輯偽代碼.....;//a3    //B    b1邏輯偽代碼;//b1    b2邏輯偽代碼;//b2}

3. 抽取小方法

可以再上面的基礎(chǔ)上更優(yōu)秀些,對代碼塊進(jìn)行抽取小方法,更符合業(yè)務(wù)描述(更符合業(yè)務(wù)的樹形結(jié)構(gòu))。推薦閱讀:看看人家 SpringBoot + vue后臺管理系統(tǒng),多么優(yōu)雅...CBm28資訊網(wǎng)——每日最新資訊28at.com

void doSomething(){    doA();    doB();}void doA(){    a1邏輯偽代碼.....;    a2邏輯偽代碼.....;    a3邏輯偽代碼.....;}void doB(){    b1邏輯偽代碼;    b2邏輯偽代碼;}

當(dāng)然你也可以繼續(xù)對 a1,a2,a3,b1,b2 等小邏輯映射為小方法,以上提到幾種寫法都是正確的,關(guān)于小方法是否抽取,后續(xù)單獨(dú)在《代碼長度與母語的關(guān)系》中討論。下面我們來看看不正確的寫法。CBm28資訊網(wǎng)——每日最新資訊28at.com

四、不正確的代碼實(shí)現(xiàn) ===========

當(dāng)你看到下面的不正確的寫法的時(shí)候,你也許會覺得不可思議,真的會寫出這樣的代碼?現(xiàn)實(shí)是:項(xiàng)目中我見到很多更糟糕的代碼,會把下面提到的問題,以及其他編程技藝的問題排列組合出現(xiàn)。CBm28資訊網(wǎng)——每日最新資訊28at.com

1. 第一種問題:不對等

第一種常見的問題不太嚴(yán)重,只對部分邏輯進(jìn)行了抽取,造成方法中執(zhí)行不對等;比如只對 b() 邏輯進(jìn)行了抽取,但對等的 a()邏輯并未抽?。?span style="display:none">CBm28資訊網(wǎng)——每日最新資訊28at.com

CBm28資訊網(wǎng)——每日最新資訊28at.com

void doSomething(){   a1邏輯偽代碼.....;   a2邏輯偽代碼.....;   a3邏輯偽代碼.....;   doB();}void doB(){   b1邏輯偽代碼;   b2邏輯偽代碼;}

改進(jìn)辦法參考上面第 3 部分正確的寫法,至少可以在doB();之前加空行,并對 a1,a2,a3 加個(gè)注釋,也會易讀很多(當(dāng)然這是一種妥協(xié)寫法)。CBm28資訊網(wǎng)——每日最新資訊28at.com

void doSomething(){		//a邏輯    a1邏輯偽代碼.....;    a2邏輯偽代碼.....;    a3邏輯偽代碼.....;        //b邏輯    doB();}void doB(){    b1邏輯偽代碼;    b2邏輯偽代碼;}

2. 第二種問題:部分抽取

第二種是對整體的部分邏輯進(jìn)行了抽取,這種方法很難命名,會給個(gè)詞不達(dá)意的名字,或使用整體的名字,這個(gè)就相對嚴(yán)重了,已經(jīng)影響到了代碼閱讀和理解。CBm28資訊網(wǎng)——每日最新資訊28at.com

比如電腦是一個(gè)整體,可以命名是電腦;如果只給你一部分(CPU,主板,顯卡)怎么命名讓人能明白?電腦部分零件?但電腦部分零件并不能讓人明白,因?yàn)樗皇且粋€(gè)邏輯主體。CPU 是一個(gè)邏輯主體,封裝了運(yùn)算。CBm28資訊網(wǎng)——每日最新資訊28at.com

CBm28資訊網(wǎng)——每日最新資訊28at.com

如下圖,只對 a1,a2 進(jìn)行了抽取,然后名字依然稱為 a,看到代碼會很疑惑,a3 明顯也屬于 a。CBm28資訊網(wǎng)——每日最新資訊28at.com

CBm28資訊網(wǎng)——每日最新資訊28at.com

void doSomething(){    doA();    a3邏輯偽代碼.....;    doB();}void doA(){    a1邏輯偽代碼.....;    a2邏輯偽代碼.....;}void doB(){    b1邏輯偽代碼;    b2邏輯偽代碼;}

3. 第三種問題:抽取錯(cuò)誤

第三種是最嚴(yán)重的問題,抽取錯(cuò)誤,和邏輯不匹配。CBm28資訊網(wǎng)——每日最新資訊28at.com

如下:把 A 的部分邏輯和 B 的部分邏輯一起抽取。CBm28資訊網(wǎng)——每日最新資訊28at.com

如果在這個(gè)基礎(chǔ)上再對抽取的部分起個(gè)晦澀的名字(其實(shí)這種抽取也起不到好名字),然后應(yīng)用一些設(shè)計(jì)模式來把代碼更分散(缺點(diǎn)隱藏起來),就成功的完成了只有自己可以看懂的代碼(可能表面看起來還很高大上)。CBm28資訊網(wǎng)——每日最新資訊28at.com

CBm28資訊網(wǎng)——每日最新資訊28at.com

由此得出結(jié)論,先別想著抽取小方法或應(yīng)用設(shè)計(jì)模式。先能平鋪直敘的寫出符合邏輯的代碼吧。CBm28資訊網(wǎng)——每日最新資訊28at.com

小方法抽取和設(shè)計(jì)模式不一定能解決問題,也能隱藏問題。CBm28資訊網(wǎng)——每日最新資訊28at.com

CBm28資訊網(wǎng)——每日最新資訊28at.com

很多難以讀懂的代碼都是受《重構(gòu)》和《設(shè)計(jì)模式》的包裝,質(zhì)量差的代碼不可怕,如果再抽取和包裝,可以想想是多恐怖。CBm28資訊網(wǎng)——每日最新資訊28at.com

五、補(bǔ)丁和模式思考

(1) 補(bǔ)丁代碼思考,代碼的腐爛CBm28資訊網(wǎng)——每日最新資訊28at.com

很多人看到這里,會覺得自己絕對不會寫出這么爛的代碼;確實(shí)一開始也許不會,但伴隨新需求,不同人不斷打補(bǔ)?。榱瞬挥绊懢€上,老代碼不讓動(dòng)),最后就會演進(jìn)未這幾個(gè)問題綜合展現(xiàn)的代碼。閱讀這樣的代碼不看到最底層代碼,根本不知道代碼在做什么,因?yàn)榉椒呀?jīng)不可信。CBm28資訊網(wǎng)——每日最新資訊28at.com

(2) 不要急于使用設(shè)計(jì)模式,寫好基礎(chǔ)代碼CBm28資訊網(wǎng)——每日最新資訊28at.com

寫出一個(gè)好的基礎(chǔ)代碼的過程:先梳理清楚邏輯樹(樹形結(jié)構(gòu),同層對等),然后做到代碼符合邏輯樹(代碼樹自然也符合樹形結(jié)構(gòu),同層的方法對等)。CBm28資訊網(wǎng)——每日最新資訊28at.com

打好基礎(chǔ)后,可以再針對基礎(chǔ)代碼的痛點(diǎn),應(yīng)用復(fù)雜手段(比如設(shè)計(jì)模式)來解決,關(guān)于方法抽取和方法長度,后續(xù)單獨(dú)文章討論。CBm28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-10436-0.html手把手教你,如何先梳理業(yè)務(wù)邏輯再寫代碼

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 提升代碼效率:掌握Python中并行for循環(huán)從入門到精通

下一篇: Java開發(fā)必安裝插件-Maven Helper

標(biāo)簽:
  • 熱門焦點(diǎn)
  • JavaScript 混淆及反混淆代碼工具

    介紹在我們開始學(xué)習(xí)反混淆之前,我們首先要了解一下代碼混淆。如果不了解代碼是如何混淆的,我們可能無法成功對代碼進(jìn)行反混淆,尤其是使用自定義混淆器對其進(jìn)行混淆時(shí)。什么是混
  • 三言兩語說透設(shè)計(jì)模式的藝術(shù)-單例模式

    寫在前面單例模式是一種常用的軟件設(shè)計(jì)模式,它所創(chuàng)建的對象只有一個(gè)實(shí)例,且該實(shí)例易于被外界訪問。單例對象由于只有一個(gè)實(shí)例,所以它可以方便地被系統(tǒng)中的其他對象共享,從而減少
  • 如何正確使用:Has和:Nth-Last-Child

    我們可以用CSS檢查,以了解一組元素的數(shù)量是否小于或等于一個(gè)數(shù)字。例如,一個(gè)擁有三個(gè)或更多子項(xiàng)的grid。你可能會想,為什么需要這樣做呢?在某些情況下,一個(gè)組件或一個(gè)布局可能會
  • 讓我們一起聊聊文件的操作

    文件【1】文件是什么?文件是保存數(shù)據(jù)的地方,是數(shù)據(jù)源的一種,比如大家經(jīng)常使用的word文檔、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存數(shù)據(jù),它既可以保
  • 如何使用JavaScript創(chuàng)建一只圖像放大鏡?

    譯者 | 布加迪審校 | 重樓如果您曾經(jīng)瀏覽過購物網(wǎng)站,可能遇到過圖像放大功能。它可以讓您放大圖像的特定區(qū)域,以便瀏覽。結(jié)合這個(gè)小小的重要功能可以大大改善您網(wǎng)站的用戶體驗(yàn)
  • JVM優(yōu)化:實(shí)戰(zhàn)OutOfMemoryError異常

    一、Java堆溢出堆內(nèi)存中主要存放對象、數(shù)組等,只要不斷地創(chuàng)建這些對象,并且保證 GC Roots 到對象之間有可達(dá)路徑來避免垃 圾收集回收機(jī)制清除這些對象,當(dāng)這些對象所占空間超過
  • 網(wǎng)紅炒股不為了賺錢,那就是耍流氓!

    來源:首席商業(yè)評論6月26日高調(diào)宣布入市,網(wǎng)絡(luò)名嘴大v胡錫進(jìn)居然進(jìn)軍了股市。在一次財(cái)經(jīng)媒體峰會上,幾個(gè)財(cái)經(jīng)圈媒體大佬就“胡錫進(jìn)炒股是否知道認(rèn)真報(bào)道”展開討論。有
  • 三星電子Q2營收60萬億韓元 存儲業(yè)務(wù)營收同比仍下滑超過50%

    7月27日消息,據(jù)外媒報(bào)道,從三星電子所發(fā)布的財(cái)報(bào)來看,他們主要利潤來源的存儲芯片業(yè)務(wù)在今年二季度仍不樂觀,營收同比仍在大幅下滑,所在的設(shè)備解決方案
  • 利用職權(quán)私自解除被封帳號 Meta開除20多名員工

    11月18日消息,據(jù)外媒援引知情人士表示,過去一年時(shí)間內(nèi),F(xiàn)acebook母公司Meta解雇或處罰了20多名員工以及合同工,指控這些人通過內(nèi)部系統(tǒng)以不當(dāng)方式重置用戶帳號,其
Top 主站蜘蛛池模板: 霍林郭勒市| 彭水| 金川县| 兴业县| 伊通| 宁津县| 壶关县| 定州市| 山阴县| 广水市| 天等县| 天津市| 澄城县| 三门县| 阿克苏市| 雅江县| 哈巴河县| 定陶县| 乌兰县| 淄博市| 湟源县| 四平市| 岚皋县| 永嘉县| 罗江县| 衡南县| 咸阳市| 阿勒泰市| 彰化县| 元氏县| 苗栗县| 宁强县| 金塔县| 隆化县| 大田县| 陈巴尔虎旗| 密山市| 贺兰县| 邵武市| 阿坝县| 巴彦淖尔市|