#感到窩心
今天在客戶這邊,看到工程師把之前上課的東西,應用在重構 legacy 產品的架構,發揮地淋漓盡致。
把原本散落在每個方法中一大堆無謂的判斷式(例如一堆 error code 的 mapping 判斷)、pre-condition (例如檢查資料的合法性、是否存在該筆資料)、log的紀錄、performance log 、共同的 exception handling 、cache 的存取、身分檢查,全都從原本又髒又肥的 function 內容中拆解出來。
程式碼複雜度指數下降、測試案例個數指數下降、相依物件個數大幅下降,讓設計恢復成原本「簡單」的模樣,關注點分離,實際的 class 都只處理 critical path, 其他的部分拆解出去,透過 DI, decorator, interceptor 來組合。
連我都沒想到他們可以靠自己拆得這麼乾淨、漂亮、簡單。
也難怪上次上完課之後,回公司推薦完又多了好幾位來報名下一梯次。
有興趣的朋友,下一梯次在九月:
https://dotblogs.com.tw/…/dependency-injection-and-aspect-o…
[註]目前此課程只支援 C#,原因是第二天講解到 AOP 的實作,會有一部分依賴於框架,而我對其他語言的框架還不夠熟悉,還不到可以收費培訓的強度,敬請見諒。
另外,這門課也是大幅度的以重構來進行設計的調整,也會寫到單元測試(使用mock framework),也會一併帶到相當多的 JetBrains 重構功能,例如 extract method, extract class, extract interface, move method, constructor generator, introduce field, inline field/variable/parameter/method 系列。
inline function 在 91 敏捷開發之路 Facebook 八卦
新的一篇 TDD 範例詳解。這次的 kata 是 Codewars 上面的「Next bigger number with the same digits」
【題目說明】
You have to create a function that takes a positive integer number and returns the next bigger number formed by the same digits:
f(12) == 21
f(513) == 531
f(2017) == 2071
If no bigger number can be composed using those digits, return -1:
f(9) == -1
f(111) == -1
f(531) == -1
【codewars 題目連結】
https://www.codewars.com/…/next-bigger-number-with-t…/csharp
【傳送門】
https://dotblogs.com.tw/…/codewars-next-bigger-number-by-tdd
【重點】
這一篇文章針對 TDD 過程中,怎麼「刻意簡單」做了些著墨,以及詳細解說幾個連續的小範圍重構技巧,包含:
① inline variable 消掉不必要的變數
② introduce variable 消掉重複,以便後續重構
③ move to outer scope, 避免迴圈內重複宣告
④ extract method, 抽象、避免重複、增加易讀性
⑤ 消除不必要的方法參數
文章品質保證大家看得過癮!
#TDD
#codewars
#kata
#refactor
inline function 在 91 敏捷開發之路 Facebook 八卦
雖然因為 php 是弱型別,所以 #PhpStorm 不像 #IntelliJ 或 #ReSharper 有 "Transform Parameter Object" 的功能可以用。
但是我們還是可以創造出自己的 #套路,把 function 標記成 static 後,inline method, 再針對 inline 完的內容,extract method,透過 extract method 來輔助精鍊參數的個數與型別。
IDE 最強大的威能,就在於重構。如果用了 PhpStorm,仍然用舊的方式在開發,真的不如用 Visual Studio Code 或是 vim 就好。
--
什麼?你沒有這問題跟需求?你是沒有在重構吧?
在【#極速開發】中,會學習到如何把整個生產環境,相關的工具鏈組合起來,發揮最大綜效,而不是一個一個的單點功能。有興趣可以參考:https://dotblogs.com.tw/hatelove/2018/10/29/201901-extreme-developing
在【#演化式設計:#測試驅動開發與持續重構】的培訓中,則是如何把這些東西進階應用在實戰上,讓你的測試驅動開發與持續重構,能行雲流水一般優雅。有興趣可以參考:https://dotblogs.com.tw/hatelove/2018/10/29/201902-refactor-and-tdd-training
inline function 在 內嵌函式(C++) 的相關結果
成員函式 GetBalance 、 Deposit 和 Withdraw 不會指定為, inline 但可以 ... Define "accessor" functions as // reference types. unsigned& x(); ... ... <看更多>
inline function 在 Inline function - Wikipedia 的相關結果
In C++, a function defined inline will, if required, emit a function shared among translation units, typically by putting it into the common section of the ... ... <看更多>
inline function 在 [C++]內嵌函數(inline function)筆記| 郭董<3小花園 - 點部落 的相關結果
紀錄並介紹一下inline funciton內嵌函數. ... [C++]內嵌函數(inline function)筆記 ... inline int square(int x) { return x*x; }. 多了inline這個 ... ... <看更多>