iT邦幫忙

重構相關文章
共有 95 則文章
鐵人賽 Modern Web DAY 19

技術 Day 19|一個 182 行的檔案,決定了全站每一次請求的命運

模組四|核心系統改寫(Day 17–21) 舊系統的請求封裝是一個檔案、182 行、兩個攔截器、16 個 if 分支。 它負責的事情包括:帶 token、設...

鐵人賽 Modern Web DAY 18

技術 Day 18|同一件事有兩套做法,比沒做還貴

模組四|核心系統改寫(Day 17–21) 這篇的主軸,是被我自己的實測推翻的。 我原本要寫的是「權限從路由級長到按鈕級」:舊系統只能控制「你能不能進這一頁...

鐵人賽 Modern Web DAY 17

技術 Day 17|重寫完,路由的程式碼從 328 行變成 704 行

模組四|核心系統改寫(Day 17–21) 先給一個看起來很糟的數字。 舊系統負責「路由與選單」的程式碼,散在四個檔案裡,合計 328 行。新系統重寫之後,...

鐵人賽 Modern Web DAY 16

技術 Day 16|每 100 個測試站抓到的問題,有 1 到 2 個會溜到正式環境

模組三|遷移執行法與驗收(Day 12–16) 我們團隊修 bug 的時候,commit 訊息會標一個階段標籤:這個問題是在哪一關被抓到的。 六年下來,這變...

鐵人賽 Modern Web DAY 15

技術 Day 15|566 個 API,17 種命名方式,而我忍住沒有邊搬邊改

模組三|遷移執行法與驗收(Day 12–16) 我數了舊系統的 API 定義:566 個。 然後我數了它們的命名前綴:17 種。 光是「查詢」這一件事,就有...

鐵人賽 Modern Web DAY 14

技術 Day 14|遷移最爽的一刻,是確認某個模組不用搬

模組三|遷移執行法與驗收(Day 12–16) 有一組數字我每次看都覺得很療癒:其中一套系統的統計模組,從 52 個頁面變成 24 個。 不是因為砍功能,是...

鐵人賽 Modern Web DAY 13

技術 Day 13|共存期間,舊系統的開發量比新系統還多

模組三|遷移執行法與驗收(Day 12–16) 重構最貴的一段,不是寫新系統,是新舊兩套同時活著的那段日子。我們的共存期超過一年。 而共存期間有一個月,我攤...

鐵人賽 AI Engineering DAY 12

技術 Day 12|把 prompt 從腳本裡搬出來,改角色設定不用碰程式

模組三|AI 生圖與生片產線(Day 10–19) 昨天講風格與角色解耦:畫風走圖片、角色走文字。今天講那些「角色文字」實際放在哪裡。 這篇是純工程,沒有...

鐵人賽 Modern Web DAY 12

技術 Day 12|同一個團隊做兩次遷移,第二次用了完全相反的策略

模組三|遷移執行法與驗收(Day 12–16) 一百個頁面要搬,第一個搬哪個? 我們做了兩次。而把兩次的第一天並排放在一起看的時候,我發現一件很有意思的事:...

鐵人賽 Modern Web DAY 11

技術 Day 11|建置設定裡那個沒人敢關的開關

模組二|選型、語言遷移與地基(Day 6–11) 模組二的最後一天,講建置。 先看舊專案的建置指令,一字不差: vue-cli-service test:u...

鐵人賽 Modern Web DAY 10

技術 Day 10|`"strict": false, // 啟用嚴格模式`

模組二|選型、語言遷移與地基(Day 6–11) 標題不是我打錯。這是我在新專案的 TypeScript 設定檔裡看到的一行,一字不差: { &quot...

鐵人賽 Modern Web DAY 9

技術 Day 9|換掉 UI 元件庫:8,023 個標籤,和一個我沒預料到的結果

模組二|選型、語言遷移與地基(Day 6–11) 這個專案是一個活了六年的 Vue 2 後台,我花了兩年把它升到 Vue 3。升級的時候 UI 元件庫也得換...

鐵人賽 Modern Web DAY 8

技術 Day 8|Vuex 裡有六個從沒打開過的空模組

模組二|選型、語言遷移與地基(Day 6–11) 這個專案是一個活了六年的 Vue 2 後台,我花了兩年把它升到 Vue 3。升級的時候,有三件事是被迫一起...

鐵人賽 Modern Web DAY 7

技術 Day 7|一個檔名拼錯六年的 mixin,和 `this` 消失的意義

模組二|選型、語言遷移與地基(Day 6–11) 舊專案裡有一個 14 行的檔案,我第一次打開它的時候看了三分鐘,然後決定把它寫成一整篇。 它同時示範了三個...

鐵人賽 Modern Web DAY 6

技術 Day 6|官方要 monorepo,我們把 93% 的程式碼留在根目錄

模組二|選型、語言遷移與地基(Day 6–11) 官方文件說主應用要放在 apps/ 底下。我們的主應用有 829 個檔案,全部待在根目錄的 src/。 這...

鐵人賽 Modern Web DAY 5

技術 Day 5|「重構要多久?」這個問題有兩個相差三倍的答案

模組一|現況盤點與立案(Day 1–5) 模組一的最後一天,來談那個一定會被問的問題。 我沒有參與當初的排程討論,所以不知道對外報了多久。 但有件事很有意思...

鐵人賽 Modern Web DAY 4

技術 Day 4|`this.baseUrl` 從哪來?全域魔法與那些沒人敢刪的東西

模組一|現況盤點與立案(Day 1–5) 昨天講的是看得見的重複:兩個 repo 裡 20 個一模一樣的檔案。今天講看不見的那種。 先給你一個謎題。假設你剛...

鐵人賽 Modern Web DAY 3

技術 Day 3|兩套系統,20 個一模一樣的檔案,和幾個正在長歪的

模組一|現況盤點與立案(Day 1–5) 我手上有兩套後台管理系統:一套給內部營運用,一套給外部合作方用。它們原本是同一份程式碼——當年為了趕時間,有人把第...

鐵人賽 Modern Web DAY 2

技術 Day 2|先量體重再談減肥:把「這 code 很爛」翻譯成一份清單

模組一|現況盤點與立案(Day 1–5) 昨天說我接手後的第一件事不是寫程式,是盤點。今天把方法攤開。 「我覺得這 code 很爛」是一句沒有殺傷力的話。...

鐵人賽 Modern Web DAY 1

技術 Day 1|342 個元件、1 個測試檔:一個活了六年的 Vue 2 後台

模組一|現況盤點與立案(Day 1–5) 先給你三個數字,全部是我自己跑指令量出來的: 342 個 Vue 元件,總共 103,870 行。全庫測試檔數量...

技術 重構影響我多深?

這一系列文章, 絕大部分是讀好幾本經典的重構、clean code的書, 將筆記與實作作為發表. 本身工作快10年, 身處在非純軟的工作環境.學生時代也不懂什麼...

鐵人賽 Software Development DAY 25

技術 Replace Type Code with Class 的重構

Replace Type Code with Class 簡介 原因: 欄位使用int、string等的類型, 無法保護它不受不正確的賦值和非法的等同性比較解法...

鐵人賽 Software Development DAY 24

技術 Introduce Null Object 的重構

Introduce Null Object 簡介 程式碼到處是處理null欄位或變數的重複邏輯. 重構前範例 假設有個JobRunner類別, 用來執行特定任務...

鐵人賽 Software Development DAY 22

技術 Combinatorial explosion 的重構

Combinatorial explosion 簡介 有好幾段程式碼, 根據不同參數的組合而幾乎都在做一樣的事情. 重構前範例 假設有個禮品店員, 根據包裝物的...

鐵人賽 Software Development DAY 21

技術 Introduce Parameter Object 的重構

Introduce Parameter Object 簡介 有函數有太多的參數時,可以將這些參數包裝成parameter object. 重構前範例 假設有個出...

鐵人賽 Software Development DAY 20

技術 Removing Shotgun Surgery 的重構

Removing Shotgun Surgery 簡介 當異動一項功能, 導致系統其他的程式碼也得異動.稱為Shotgun surgery是一種比喻, 霰彈槍發...

鐵人賽 Software Development DAY 19

技術 Coupling 耦合

Tight coupling的說明 緊耦合指的是兩個或多個類別(模組), 彼此高度的相互依賴 緊耦合導致程式碼難以維護與修改, 因為修改一個類別會連續性影響另...

鐵人賽 Modern Web DAY 23

技術 Day23 — 青出於藍 | 淺談「識別壞味道」,分辨程式碼的好壞

前言 程式碼臭臭? 何為程式碼異味? 程式碼又是如何散發「臭味」? 在「重構:改善既有程式的設計」 這本書有提到,程式碼異味(Code Smell)是在講說,程...

鐵人賽 Software Development DAY 18

技術 Cohesion 內聚

Low cohesion的說明 一個類別或模組的職責太多, 或者它的函數之間沒有緊密的關係 低內聚的類別群, 會讓開發者難以理解與維護 因為它們執行不相關的...

鐵人賽 Software Development DAY 16

技術 什麼是測試驅動開發(Test Driven Development)

流程 當我們與使用者討論完需求, 並整理成需求清單, 則可依照清單做測試開發.假設如下圖1, 有3筆需求, 我們先為第一筆需求撰寫會失敗(紅燈)的測試. 圖1...