<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        代碼整潔之道(重構(gòu))

        來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 22:05:48
        文檔

        代碼整潔之道(重構(gòu))

        代碼整潔之道(重構(gòu)):前言 之前也介紹過我們團隊的前端項目從零開始經(jīng)歷8個月迭代業(yè)務(wù)代碼10萬行(僅為產(chǎn)品長期規(guī)劃需求的20%),至今仍然在不斷迭代的過程。 團隊成員除了設(shè)計好的架構(gòu)來管理這種復(fù)雜度極高的前端應(yīng)用,還開始補充設(shè)計模式以及重構(gòu)方面的知識,目的是為了讓項目代
        推薦度:
        導(dǎo)讀代碼整潔之道(重構(gòu)):前言 之前也介紹過我們團隊的前端項目從零開始經(jīng)歷8個月迭代業(yè)務(wù)代碼10萬行(僅為產(chǎn)品長期規(guī)劃需求的20%),至今仍然在不斷迭代的過程。 團隊成員除了設(shè)計好的架構(gòu)來管理這種復(fù)雜度極高的前端應(yīng)用,還開始補充設(shè)計模式以及重構(gòu)方面的知識,目的是為了讓項目代

        前言

        之前也介紹過我們團隊的前端項目從零開始經(jīng)歷8個月迭代業(yè)務(wù)代碼10萬行(僅為產(chǎn)品長期規(guī)劃需求的20%),至今仍然在不斷迭代的過程。

        團隊成員除了設(shè)計好的架構(gòu)來管理這種復(fù)雜度極高的前端應(yīng)用,還開始補充設(shè)計模式以及重構(gòu)方面的知識,目的是為了讓項目代碼在不斷迭代的過程中優(yōu)化項目代碼,保持代碼的新鮮度,魯棒性,可維護性… 讓后續(xù)加入的團隊新人也可以快速加入我們的產(chǎn)品開發(fā)中

        PS:  不管對于何種語言,重構(gòu)都是軟件開發(fā)過程中不可或缺的一部分。如果已經(jīng)了解重構(gòu)的基礎(chǔ),可以直接跳往至文章后面的重構(gòu)案例部分。

        重構(gòu)背景

        “如果尿布臭了,就換掉它”。

      1. 隨著業(yè)務(wù)需求的不斷加入,代碼隨著時間的推移變得越來越糟。
      2. 這其中可能包括以下壞味道(僅列舉):
      3. 重復(fù)的代碼
      4. 過長的函數(shù)
      5. 遵循一條原則: 每當感覺需要注釋來說明什么的時候,可以嘗試將需要說明的東西寫進一個函數(shù)中
      6. 冗贅類
      7. 當子類沒有做足夠的工作的時候,或者說在可見的預(yù)期內(nèi),不會有新的情況出現(xiàn),考慮將類內(nèi)聯(lián)化。
      8. 過長的類
      9. 這種情況容易出現(xiàn)冗余代碼。比如如果類內(nèi)出現(xiàn)了多個變量帶有相同的前綴或者后綴,這意味著你可以考慮把他們提煉到某個組件內(nèi),或者考慮這個組件是否可以成為子類,使用提煉類的手法來重構(gòu)。
      10. 什么是重構(gòu)

        我們回過頭來看一下"什么是重構(gòu)"

      11. 不改變軟件可觀察行為的前提下,改善其內(nèi)部結(jié)構(gòu)
      12. 以提高理解性和降低修改成本
      13. 摘自《重構(gòu) - 改善既有代碼的設(shè)計》(下面簡稱《重構(gòu)》)

        何時重構(gòu)?

        我們需要明確的一點是: 重構(gòu)不是一件應(yīng)該特地撥出一段時間來做的事情。重構(gòu)不是目的,但是重構(gòu)可以幫助你把事情做好。

        事不過三,三則重構(gòu)

      14. 重復(fù)性工作,既有的代碼無法幫助你輕松添加新特性時
      15. 修補bug時,排查邏輯困難
      16. code review 可以讓他人來復(fù)審代碼檢查是否具備可讀性,可理解性
      17. 太多的代碼無注釋,已然連自己都無法快速理清代碼邏輯
      18. 重構(gòu)的衡量指標

      19. 數(shù)量: 代碼的行數(shù)
      20. 質(zhì)量: 代碼復(fù)雜度,耦合度,可讀性,架構(gòu)依賴復(fù)雜度等
      21. 成本: 花費的時間
      22. 回報(成果):  支持后續(xù)功能的快速疊加,解決現(xiàn)有因代碼設(shè)計問題無法優(yōu)化的矛盾等
      23. 抓重點 抓重點啦

        說了這么多廢話,其實大家都明白沒有與實踐結(jié)合的理論都是空虛的。

        但是 重構(gòu)和 設(shè)計模式一樣,也是需要一個"學(xué)習(xí)——領(lǐng)悟——突破"的過程。第一步的學(xué)習(xí)讓你了解基本的重構(gòu)手法,第二步的實踐勾起你對重構(gòu)手法的回憶以及重溫應(yīng)用,第三步的應(yīng)用以及實踐經(jīng)驗激發(fā)你的思考,領(lǐng)悟以及總結(jié),以致于靈活運用。
        但凡是人,總是在不斷學(xué)習(xí),不斷溫習(xí),以達到具體場景具體應(yīng)用,靈活自如。

        重構(gòu)是一個很大的話題,《重構(gòu)》作者本人也是經(jīng)歷了N多的項目,以及多年的經(jīng)驗才總結(jié)出來的重構(gòu)技巧。

        重構(gòu)技巧

        《重構(gòu)》一書作者總結(jié)的重構(gòu)手法實在是太多了,只能通過圖片來展示一下所有作者總結(jié)的重構(gòu)列表。
        具體的補充,大家可以看看《重構(gòu)》一書。

        重構(gòu)的實踐

        作者推薦的一種做法:

      24. 隨機挑選一個目標 先給自己選擇一個目標(譬如“去掉一堆不必要的子類”),然后朝著目標前進,每一步走得小而堅定
      25. 沒把握就停下來 當你無法證明自己所做的一切能夠保證原有程序的邏輯和語義時,請你停下來思考:既有的重構(gòu)是改善了還是毫無成果需要撤銷。
      26. 保證每次重構(gòu)后的測試都能正常跑通
      27. 作為開發(fā)者, 應(yīng)當把重構(gòu)作為開發(fā)的一部分,一邊開發(fā)一邊重構(gòu)。在快速堆疊代碼,實現(xiàn)基本需求功能的基礎(chǔ)上,寫好測試用例,保證功能不變,逐步重構(gòu)。
        這也是我們團隊要求每個人都掌握重構(gòu)這門必備技能的原因。優(yōu)秀的程序員應(yīng)當盡量避免低質(zhì)量的代碼。

        重構(gòu)案例

        故事場景

        有三種類型的電影,顧客可以進行租賃

        租賃規(guī)則

        價格計算規(guī)則:

        普通片兒 —— 起步價2¥,超過2天的部分每天每部電影收費1.3元
        新片兒    —— 每天每部3元
        兒童片    —— 起步價2¥,超過3天的部分每天每部電影收費0.8元

        積分計算規(guī)則:

        每借一部電影積分加1,新片每部加2

        原始代碼

        CODEPEN

        程序結(jié)果:(請保證重構(gòu)后結(jié)果不變~)

        類圖

         

        有興趣的可以先看看原始代碼,考慮一下其中的原始對象關(guān)系,再行考慮如何重構(gòu)代碼。原始代碼其實是有很多問題可以挖掘的,下面是我們的討論整理:

      28. 劃分職責(zé)關(guān)系,遵循單一職責(zé)原則
      29. statement打印賬單函數(shù)承擔了很多功能,包括收費計算,積分計算以及結(jié)果展示等等
      30. 解法1: 6.1 Extract Method(提煉函數(shù)) —— 最常用的重構(gòu)手法
      31. 解法2: 9.1 Decompose Conditional(分解條件表達式)
      32. 用戶類中承擔了不屬于它的職責(zé),包括:收費規(guī)則、積分規(guī)則。這些職責(zé)應(yīng)該是屬于電影類型的。
      33. 整理清楚其中的業(yè)務(wù)邏輯,比如收費規(guī)則和積分規(guī)則 - 見故事場景
      34. 不要直接訪問對象的數(shù)據(jù)。容易發(fā)生其他對象改變該對象的數(shù)據(jù),而擁有該數(shù)據(jù)的對象卻一無所知。
      35. 解法:8.10 Encapsulate Field(封裝字段手法) —— 使數(shù)據(jù)和行為想分離
      36. 重構(gòu)不應(yīng)該被外界所感知,保證testcases依然可行
      37. 部分重構(gòu)

        這里為了更好的展示重構(gòu)的手法,使用TS,根據(jù)上面的討論進行了部分重構(gòu),重構(gòu)的方式其實是根據(jù)業(yè)務(wù)未來的擴展方向而定,并沒有最優(yōu)解,有興趣的可以加入我們,拋出你的見解~

        CODEPEN 執(zhí)行結(jié)果:

         

        重構(gòu)后的類圖關(guān)系

        基本技巧

      38. 小步前進,頻繁測試(保證足夠的測試來支持你的重構(gòu)行動)
      39. 使用智能開發(fā)工具(比如VSCode右鍵可以將過長的函數(shù)代碼拆解函數(shù)化)
      40. 推薦書籍

        《代碼整潔之道》
        《重構(gòu) - 改善既有代碼的設(shè)計》
        《修改代碼的藝術(shù)》
        《代碼大全》

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

        文檔

        代碼整潔之道(重構(gòu))

        代碼整潔之道(重構(gòu)):前言 之前也介紹過我們團隊的前端項目從零開始經(jīng)歷8個月迭代業(yè)務(wù)代碼10萬行(僅為產(chǎn)品長期規(guī)劃需求的20%),至今仍然在不斷迭代的過程。 團隊成員除了設(shè)計好的架構(gòu)來管理這種復(fù)雜度極高的前端應(yīng)用,還開始補充設(shè)計模式以及重構(gòu)方面的知識,目的是為了讓項目代
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top 主站蜘蛛池模板: 国产精品亚洲AV三区| 亚洲ts人妖网站| 国产成人亚洲综合无码| 自拍偷自拍亚洲精品被多人伦好爽 | 精品亚洲一区二区| 亚洲日韩区在线电影| 亚洲色偷偷综合亚洲av78| 黄色片网站在线免费观看| 无码免费一区二区三区免费播放| 182tv免费观看在线视频| 免费一级毛片女人图片| 久久精品亚洲中文字幕无码麻豆| 亚洲精华液一二三产区| 鲁丝片一区二区三区免费| 国产精品色午夜免费视频| 亚洲ⅴ国产v天堂a无码二区| 深夜特黄a级毛片免费播放| 青青视频观看免费99| 国产亚洲一区二区三区在线观看| 久久久久久久久无码精品亚洲日韩 | 国产又大又长又粗又硬的免费视频 | 亚洲精品天天影视综合网| 1000部拍拍拍18勿入免费视频软件| 亚洲精品美女久久久久99小说| 亚洲av午夜精品无码专区| 免费看的成人yellow视频| 亚洲综合在线观看视频| 国产免费看JIZZ视频| 亚洲精品国产肉丝袜久久| 中国一级全黄的免费观看| 四虎永久免费影院在线| 成人国产精品免费视频| 亚洲色图视频在线观看| 最近中文字幕免费mv在线视频| 亚洲精品乱码久久久久久蜜桃不卡| 99免费视频观看| 亚洲日本在线免费观看| 9420免费高清在线视频| 亚洲a∨国产av综合av下载| 妞干网免费视频观看| 亚洲人成小说网站色|