摘要:以下為正文避免重復(fù)代碼是軟件發(fā)展的一項原則,其主旨是減少代碼重復(fù)現(xiàn)象。原則簡單例子假設(shè)你的代碼中有很多地方需要根據(jù)當(dāng)前用戶的角色來執(zhí)行。如果檢查權(quán)限的邏輯在整段代碼中重復(fù)很多次,在重復(fù)代碼中出現(xiàn)的問題將很難修復(fù)。
【編者按】本文作者為來自 SoftwareYoga.com 的軟件架構(gòu)師、敏捷與 DevOps 開發(fā)流程踐行者 Deepak Karanth,文章主要介紹了 DRY 原則的諸多優(yōu)點。
本文系國內(nèi) ITOM 管理平臺 OneAPM 編譯呈現(xiàn)。以下為正文:
“避免重復(fù)代碼”(DRY) 是軟件發(fā)展的一項原則,其主旨是減少代碼重復(fù)現(xiàn)象。
“所有內(nèi)容寫兩遍”(WET) 則是上述原則的反義縮寫,意指不遵守 DRY 原則的代碼。
開發(fā)人員應(yīng)當(dāng)以其中哪個原則為目標(biāo)本應(yīng)是顯而易見的。但是,也許這個時候已經(jīng)有人開始拿出證據(jù)來證明我是錯的。
在本文中,我們會逐一討論編寫代碼時遵循 DRY 原則的好處。首先,我們先舉一個簡單的例子來說明 DRY 原則的基本優(yōu)勢。
DRY 原則 - 簡單例子假設(shè)你的代碼中有很多地方需要根據(jù)當(dāng)前用戶的角色來執(zhí)行。比如:只有編輯或管理員才可以執(zhí)行 createPage() 函數(shù),只有管理員才可執(zhí)行 deletePage() 函數(shù)。
在creatPage(創(chuàng)建頁面)和 deletePage(刪除頁面)函數(shù)檢查用戶的角色時,我們可以使用下面這個 isPermitted() 單一函數(shù),而不是分別開展用戶角色檢查的邏輯。
//get the current Subject Subject currentUser = context.getSubject(); if (isPermitted(currentUser)) { //allow execution of deletePage} else { //block execution }
將 isPermitted() 的邏輯固定在一個地方,就可以避免重復(fù),同時反復(fù)利用代碼。另外一個優(yōu)勢就是邏輯的獨立性,即 createPage() 和 deletePage() 無需知道如何檢查權(quán)限。
當(dāng)然,DIY 原則的優(yōu)勢遠(yuǎn)不止這樣。
DRY 原則的優(yōu)勢 可維護(hù)性DRY 原則的最大優(yōu)勢是可維護(hù)性。如果檢查權(quán)限的邏輯在整段代碼中重復(fù)很多次,在重復(fù)代碼中出現(xiàn)的問題將很難修復(fù)。修復(fù)一段代碼中的某個問題后,很容易忘記修復(fù)其他重復(fù)代碼中同樣存在的問題。同樣,如果需要修改邏輯,就得四處復(fù)制粘貼。如果使用不重復(fù)的代碼,只需在一處維護(hù)代碼即可。新的邏輯和漏洞修復(fù)都只需在一處進(jìn)行,不必再四處徘徊。通過這種方式開發(fā)的軟件既穩(wěn)定又可靠。
可讀性高大多數(shù)情況下,遵循 DRY 原則的代碼更容易閱讀。這并不是因為 DRY 原則本身,而是因為開發(fā)人員在代碼中投入了更多精力,讓它符合一定的原則(比如 DRY 原則)。
重復(fù)使用DRY 原則始終提倡二次利用代碼,這是因為我們會將2個或2個以上重復(fù)代碼實例并入一個代碼塊。可重用代碼縮短了開發(fā)時間,因此從長遠(yuǎn)看,可重用代碼是有回報的。
成本合理如果想說服管理層用更多的時間來提高代碼質(zhì)量,就可以用“成本”這個理由。代碼越長,成本越高。代碼越長,維護(hù)代碼、修復(fù)漏洞所需的人手和時間也越多。代碼越長,開發(fā)時間和漏洞也越多,結(jié)果就是客戶非常不滿。無庸贅述。
測試方便這里我們討論的是模塊測試和集成測試,而不是手動測試。測試時需要覆蓋的路徑和功能越多,為測試而編寫的代碼就會越長。如果代碼不重復(fù),就只需要測試一個主路徑。當(dāng)然,不同的行為仍然需要接受測試。
注意事項雖然 DRY 原則好處多多,但還是有幾個小缺陷。
不是所有代碼都需要整合成一段。有時候2段代碼看上去差不多,但卻存在細(xì)微差異。什么時候應(yīng)當(dāng)將代碼段整合成一段,什么時候又應(yīng)當(dāng)讓它們保持分離狀態(tài),都需要仔細(xì)斟酌。
如果代碼太過簡略,會讓人難以理解。我曾見過開發(fā)人員在只有一個代碼塊實例時,還要貫徹 DRY
原則。雖然我欣賞他們希望讓代碼更出色、可重用率更高的想法和遠(yuǎn)見,但是我只有在需要二次利用代碼時才會去遵循 DRY 原則。
人們經(jīng)常會忽略的是,DRY 原則并不僅僅適用于代碼,它還可以同等地應(yīng)用到數(shù)據(jù)庫設(shè)計、文檔編寫、代碼測試等方面。
OneAPM 能為您提供端到端的 Java 應(yīng)用性能解決方案,我們支持所有常見的 Java 框架及應(yīng)用服務(wù)器,助您快速發(fā)現(xiàn)系統(tǒng)瓶頸,定位異常根本原因。分鐘級部署,即刻體驗,Java 監(jiān)控從來沒有如此簡單。想閱讀更多技術(shù)文章,請訪問 OneAPM 官方技術(shù)博客。
本文轉(zhuǎn)自 OneAPM 官方博客
原文地址:https://dzone.com/articles/is-your-code-dry-or-wet
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/65887.html
摘要:直到最近,我們?nèi)匀辉谟煤唵蔚幕卣{(diào)函數(shù)來處理異步的問題。當(dāng)我們只有一個異步任務(wù)的時候使用回調(diào)函數(shù)看起來還不會有什么問題。 原文地址:http://blog.getify.com/promis... 廈門旅行歸來,繼續(xù)理解Promise 在上一篇深入理解Promise五部曲:1.異步問題中,我們揭示了JS的異步事件輪詢并發(fā)模型并且解釋了多任務(wù)是如何相互穿插使得它們看起來像是同時運行的。...
摘要:前端面試每日題,以面試題來驅(qū)動學(xué)習(xí),每天進(jìn)步一點讓努力成為一種習(xí)慣,讓奮斗成為一種享受相信堅持的力量項目地址推薦歡迎跟一起折騰前端,系統(tǒng)整理前端知識,目前正在折騰,打算打通算法與數(shù)據(jù)結(jié)構(gòu)的任督二脈。 《論語》,曾子曰:吾日三省吾身(我每天多次反省自己)。 前端面試每日3+1題,以面試題來驅(qū)動學(xué)習(xí),每天進(jìn)步一點! 讓努力成為一種習(xí)慣,讓奮斗成為一種享受!相信 堅持 的力量!!! 項目...
摘要:前端面試每日題,以面試題來驅(qū)動學(xué)習(xí),每天進(jìn)步一點讓努力成為一種習(xí)慣,讓奮斗成為一種享受相信堅持的力量項目地址推薦歡迎跟一起折騰前端,系統(tǒng)整理前端知識,目前正在折騰,打算打通算法與數(shù)據(jù)結(jié)構(gòu)的任督二脈。 《論語》,曾子曰:吾日三省吾身(我每天多次反省自己)。 前端面試每日3+1題,以面試題來驅(qū)動學(xué)習(xí),每天進(jìn)步一點! 讓努力成為一種習(xí)慣,讓奮斗成為一種享受!相信 堅持 的力量!!! 項目...
摘要:持續(xù)心累的找工作階段算是結(jié)束了,不同公司對面試的知識側(cè)重點不同,整體的感受就是大公司可能更偏向一些基礎(chǔ)或者原理布局一些經(jīng)典算法方面。現(xiàn)將我在面試過程遇到的問題總結(jié)下。目前先傳題目答案整理好之后再發(fā)布出來。 持續(xù)心累的找工作階段算是結(jié)束了,不同公司對面試的知識側(cè)重點不同,整體的感受就是:大公司可能更偏向一些JS基礎(chǔ)或者原理、html布局、一些經(jīng)典算法方面。小公司的面試更加側(cè)重對經(jīng)驗和細(xì)節(jié)...
閱讀 1357·2021-10-09 09:44
閱讀 1440·2021-09-28 09:36
閱讀 15927·2021-09-22 15:55
閱讀 1239·2021-09-22 15:45
閱讀 2199·2021-09-02 09:48
閱讀 2783·2019-08-29 17:19
閱讀 2296·2019-08-29 10:54
閱讀 906·2019-08-23 18:40