国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網(wǎng)易首頁(yè) > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

一段代碼竟然包含了十幾種業(yè)務(wù)邏輯,程序員:一個(gè)委托直接解耦!

0
分享至

公司一程序員有一段代碼寫得太亂了,總結(jié)下這段代碼的邏輯那就是業(yè)務(wù)邏輯結(jié)束了,需要往很多地方寫入業(yè)務(wù)結(jié)束的處理邏輯,而這個(gè)程序員對(duì)于業(yè)務(wù)結(jié)束的處理邏輯,我大概看了下,總共寫了大概有3000行左右的代碼,直接給我整崩潰了,原因是他把所有邏輯都寫在了一起,但凡有一個(gè)邏輯寫的有問(wèn)題,代碼都走不下去。

事情的起因是這個(gè)程序員寫的軟件總是在業(yè)務(wù)結(jié)束的時(shí)候出各種問(wèn)題,改來(lái)改去,最后他自己都給改懵了,最后,項(xiàng)目經(jīng)理看他腦子已經(jīng)亂了,于是就讓我?guī)兔纯此拇a,看看能不能幫他找出問(wèn)題來(lái)。

他這段代碼是寫在一個(gè)工具類里面的,還好,他還知道封裝一個(gè)工具類來(lái)整合業(yè)務(wù)結(jié)束的處理邏輯,但是一看代碼行,著實(shí)給我嚇了一跳,代碼總共有3000多行!

據(jù)這個(gè)程序員所說(shuō),在業(yè)務(wù)邏輯結(jié)束以后,首先得往數(shù)據(jù)庫(kù)里面寫入日志,還得在本地寫入文本日志,最后根據(jù)業(yè)務(wù)的結(jié)束狀態(tài),需要往外部發(fā)送業(yè)務(wù)邏輯的結(jié)束信號(hào),還得在PLC里面寫入數(shù)據(jù)和業(yè)務(wù)狀態(tài),最后我數(shù)了一下,前前后后,在這段業(yè)務(wù)結(jié)束的代碼里面總共需要往本地或者外部發(fā)送十幾種數(shù)據(jù)或者狀態(tài)。

但是呢,其實(shí)業(yè)務(wù)結(jié)束的邏輯本身就幾十行,后面近3000多行代碼都是用來(lái)處理數(shù)據(jù)信號(hào)和數(shù)據(jù)存儲(chǔ)以及狀態(tài)的。

最后,雖然我們通過(guò)分析,解決了這段代碼中的BUG,但是,面對(duì)這3000多行的代碼,我實(shí)在忍不了,因?yàn)榇a也得太臃腫、太耦合了!

于是我問(wèn)他:“如果當(dāng)中有一段邏輯不用了你會(huì)怎么辦?”

他想了一會(huì)兒,但是也沒想多久,告訴我:“只能把這段代碼給注釋了!”

然后我又問(wèn)他:“如果這里面又要新增一部分邏輯,你又會(huì)怎么辦?”

結(jié)果他說(shuō):“那就在現(xiàn)在的代碼基礎(chǔ)之上再插入新的邏輯代碼!”

我就知道他會(huì)這么說(shuō),而且,他也只能這么干!

接著,我又問(wèn)他:“現(xiàn)在你把所有的業(yè)務(wù)結(jié)束邏輯都寫在了一塊,萬(wàn)一系統(tǒng)里面有其他的界面需要知道業(yè)務(wù)結(jié)束的狀態(tài),你怎么辦?”

他告訴我:“我在代碼里面加了一個(gè)狀態(tài),其他頁(yè)面只要監(jiān)聽這個(gè)狀態(tài),就可以了!”

于是我反問(wèn):“你會(huì)怎么做?”

他回答:“在頁(yè)面上加一個(gè)定時(shí)器,然后一直讀取存儲(chǔ)狀態(tài)的變量,發(fā)現(xiàn)值變了,就知道業(yè)務(wù)結(jié)束了!”

我無(wú)奈地拍了拍腦袋:“萬(wàn)一,我說(shuō)萬(wàn)一,有十幾二十甚至是上百個(gè)頁(yè)面都需要知道這個(gè)狀態(tài),你難道要寫十幾二十甚至上百個(gè)計(jì)時(shí)器嗎?”

這時(shí)候,他不說(shuō)話了,于是我說(shuō):“事情不需要那么復(fù)雜,只需要一個(gè)委托就夠了!”

委托(Delegate),在C#這門編程語(yǔ)言里面又稱事件,簡(jiǎn)單得說(shuō),委托就是一種對(duì)事件的訂閱!通過(guò)聲明調(diào)用,可以將事件觸發(fā)信號(hào)分發(fā)給訂閱了委托的其他方法中!

比如說(shuō),現(xiàn)在代碼中的業(yè)務(wù)邏輯結(jié)束了,我們可以聲明一個(gè)委托,然后在業(yè)務(wù)邏輯結(jié)束時(shí)調(diào)用這個(gè)委托,這時(shí)候,只要外部代碼訂閱了這個(gè)委托,那么它們就會(huì)收到委托被執(zhí)行的消息,具體來(lái)說(shuō),訂閱委托實(shí)際上就是給委托一個(gè)執(zhí)行方法,在委托被執(zhí)行后,這個(gè)執(zhí)行方法會(huì)一起被執(zhí)行!

現(xiàn)在,在上述程序員寫的業(yè)務(wù)結(jié)束的代碼中集合了十幾種需要處理的邏輯,這時(shí)候,我們可以在業(yè)務(wù)結(jié)束的代碼里面聲明一個(gè)委托,然后將這十幾種需要處理的邏輯單獨(dú)封裝起來(lái),然后訂閱業(yè)務(wù)結(jié)束的委托,當(dāng)委托被觸發(fā)后,這十幾種已經(jīng)封裝的邏輯塊都將收到事件信號(hào),逐一處理即可。

使用委托的好處在于它可以將繁復(fù)的業(yè)務(wù)邏輯模塊化,從而提升代碼的可讀性和可維護(hù)性,而委托本身就是一種狀態(tài)機(jī)制,因此,上述程序員寫的狀態(tài)字段的監(jiān)聽程序也就沒必要寫了,直接將委托本身當(dāng)作狀態(tài)或者使用委托參數(shù)的方式,把狀態(tài)傳遞給訂閱者即可。

結(jié)語(yǔ)

委托的概念其實(shí)很簡(jiǎn)單,其實(shí)就是“當(dāng)發(fā)生某件事情的時(shí)候由事情的發(fā)生者告訴訂閱者”,這跟我們手機(jī)上的消息推送機(jī)制很像,比如說(shuō)當(dāng)你關(guān)注了某個(gè)明星的賬號(hào),當(dāng)這個(gè)明星的賬號(hào)下面有了新的動(dòng)態(tài),你的手機(jī)就會(huì)在第一時(shí)間收到這個(gè)明星發(fā)送的最新動(dòng)態(tài)。

有一些剛開始使用委托的程序員會(huì)覺得委托會(huì)增加代碼的復(fù)雜性,但是,實(shí)際上用對(duì)了委托會(huì)感覺真香!

聲明:個(gè)人原創(chuàng),僅供參考

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關(guān)推薦
熱點(diǎn)推薦
小米事故炸翻37萬(wàn)車主,雷軍左右為難!

小米事故炸翻37萬(wàn)車主,雷軍左右為難!

鳴金網(wǎng)
2026-02-28 10:45:03
吉利偷偷換上了朱雀新車標(biāo),被18個(gè)國(guó)家搶購(gòu),帥得有點(diǎn)太過(guò)分

吉利偷偷換上了朱雀新車標(biāo),被18個(gè)國(guó)家搶購(gòu),帥得有點(diǎn)太過(guò)分

有態(tài)度網(wǎng)友17y
2026-02-26 19:58:08
率隊(duì)2-1絕殺!U23國(guó)足隊(duì)長(zhǎng)留洋爆發(fā):穿10號(hào)送助攻雙響 視頻曝光

率隊(duì)2-1絕殺!U23國(guó)足隊(duì)長(zhǎng)留洋爆發(fā):穿10號(hào)送助攻雙響 視頻曝光

侃球熊弟
2026-02-28 10:06:33
趙忠祥離世6年后,22年前不惜賭上清白陷害他的饒穎,如今怎樣了

趙忠祥離世6年后,22年前不惜賭上清白陷害他的饒穎,如今怎樣了

胡一舸南游y
2026-02-28 17:19:02
伊朗外長(zhǎng):目前美伊之間沒有直接聯(lián)系

伊朗外長(zhǎng):目前美伊之間沒有直接聯(lián)系

界面新聞
2026-02-28 23:26:14
A股:剛剛,人民日?qǐng)?bào)權(quán)威發(fā)布,釋放一信號(hào),下周一將迎來(lái)新變化

A股:剛剛,人民日?qǐng)?bào)權(quán)威發(fā)布,釋放一信號(hào),下周一將迎來(lái)新變化

另子維愛讀史
2026-02-28 20:23:29
50歲以后,別心疼錢,少吃花生,多吃8種“堿性食物”,氣色好

50歲以后,別心疼錢,少吃花生,多吃8種“堿性食物”,氣色好

美食店主
2026-02-12 00:08:26
這次荷蘭沒話說(shuō)了!中方正式宣布:更換國(guó)內(nèi)供應(yīng)商,從此不再合作

這次荷蘭沒話說(shuō)了!中方正式宣布:更換國(guó)內(nèi)供應(yīng)商,從此不再合作

曉劗就是我
2026-02-26 15:50:07
美國(guó)正式下場(chǎng)了,大場(chǎng)面來(lái)了,伊朗的表現(xiàn)可以名譽(yù)平反了吧

美國(guó)正式下場(chǎng)了,大場(chǎng)面來(lái)了,伊朗的表現(xiàn)可以名譽(yù)平反了吧

明人明察
2026-02-28 19:47:41
44歲高云翔天津街邊攤煎餅,穿著樸素動(dòng)作生澀,直言找到新工作了

44歲高云翔天津街邊攤煎餅,穿著樸素動(dòng)作生澀,直言找到新工作了

一盅情懷
2026-02-28 17:55:12
美軍航母“炸”了,史詩(shī)級(jí)災(zāi)難,把臉都丟光了

美軍航母“炸”了,史詩(shī)級(jí)災(zāi)難,把臉都丟光了

毛豆論道
2026-02-26 19:32:00
太憋屈!昔日王牌自曝曼聯(lián)噩夢(mèng):滕哈格毀了他的職業(yè)生涯

太憋屈!昔日王牌自曝曼聯(lián)噩夢(mèng):滕哈格毀了他的職業(yè)生涯

瀾歸序
2026-02-28 04:57:16
名將慘遭5連鞭零封,世錦賽冠軍2-5爆冷出局,丁俊暉種子資格紅燈

名將慘遭5連鞭零封,世錦賽冠軍2-5爆冷出局,丁俊暉種子資格紅燈

籃球看比賽
2026-02-28 16:59:37
對(duì)標(biāo)庫(kù)里南!保時(shí)捷全新大型SUV“K1”渲染圖曝光

對(duì)標(biāo)庫(kù)里南!保時(shí)捷全新大型SUV“K1”渲染圖曝光

CNMO科技
2026-02-28 13:46:09
大量瑞幸新年禮盒流入閑魚,內(nèi)含便攜咖啡機(jī),全新最低46塊

大量瑞幸新年禮盒流入閑魚,內(nèi)含便攜咖啡機(jī),全新最低46塊

閑搞機(jī)
2026-02-27 11:02:52
真當(dāng)中國(guó)不敢動(dòng)手?中方向全世界宣布一件大事:退出1900億大項(xiàng)目

真當(dāng)中國(guó)不敢動(dòng)手?中方向全世界宣布一件大事:退出1900億大項(xiàng)目

科普100克克
2025-12-30 00:14:37
“太恐怖,iPhone半夜自己給陌生人打47分鐘電話!”

“太恐怖,iPhone半夜自己給陌生人打47分鐘電話!”

都市快報(bào)橙柿互動(dòng)
2026-02-25 11:28:41
都說(shuō)不去日本,春節(jié)赴日的卻是這群人!日媒暗訪揭開真相

都說(shuō)不去日本,春節(jié)赴日的卻是這群人!日媒暗訪揭開真相

通鑒史智
2026-02-28 16:33:46
內(nèi)存 / 存儲(chǔ)瘋漲,所以手機(jī)也要漲價(jià)咯

內(nèi)存 / 存儲(chǔ)瘋漲,所以手機(jī)也要漲價(jià)咯

電腦吧評(píng)測(cè)室
2026-02-28 22:07:07
終于有人把話說(shuō)透了:當(dāng)普通人存款到20–50萬(wàn),危險(xiǎn)的不是沒錢

終于有人把話說(shuō)透了:當(dāng)普通人存款到20–50萬(wàn),危險(xiǎn)的不是沒錢

生活新鮮市
2026-02-22 06:40:40
2026-03-01 02:07:00
程序員古耕 incentive-icons
程序員古耕
程序員、網(wǎng)文作家、自媒體人
599文章數(shù) 389關(guān)注度
往期回顧 全部

頭條要聞

伊朗媒體公布反擊美軍軍事行動(dòng)結(jié)果

頭條要聞

伊朗媒體公布反擊美軍軍事行動(dòng)結(jié)果

體育要聞

球隊(duì)主力全報(bào)銷?頂風(fēng)擺爛演都不演了

娛樂要聞

周杰倫兒子正面照曝光,與父親好像

財(cái)經(jīng)要聞

沖突爆發(fā) 市場(chǎng)變天?

科技要聞

狂攬1100億美元!OpenAI再創(chuàng)融資神話

汽車要聞

嵐圖泰山黑武士版3月上市 搭載華為四激光智駕方案

態(tài)度原創(chuàng)

親子
數(shù)碼
旅游
手機(jī)
公開課

親子要聞

嬰兒吃的“洋”輔食,九成靠代工貼牌?涉及上市公司

數(shù)碼要聞

小米超薄充電寶亮相MWC,98g有多能打?

旅游要聞

忻州古城×元宵節(jié) | “夯”爆了!看非遺社火解鎖忻州古城的超長(zhǎng)年味!

手機(jī)要聞

澎湃OS再次公布進(jìn)展通報(bào):10個(gè)問(wèn)題,僅修復(fù)一則!

公開課

李玫瑾:為什么性格比能力更重要?

無(wú)障礙瀏覽 進(jìn)入關(guān)懷版