【重構】使用 strategy pattern 來取代複雜的 switch cases 與 if/else statement
上回在客戶那邊跟著他們一起重構 legacy code 中一大陀的 if/else if 裡面複雜的邏輯。(不同層級、模組的 cache 中做不同的處理)
因為當時時間有限,大家技能水平普遍有點跟不上,所以雖然讓產品程式碼變得乾淨一點,但對學習重構來說,大家少的東西還是太多了。
因此答應了他們,會再弄個簡單一點的範例,包含重構的過程步驟,source code,以及重構的操作過程錄成影片,供他們台灣跟國外的 RD 可以學習跟練習。
--
這例子其實也是我幾年前 3 天 TDD 版本中,重構的 workshop 裡面擷取出來的一段核心,從 C# 換成了 Java,只是重構過程的行雲流水程度,已經今非昔比了。有興趣的朋友可以看一下,我是怎麼用 IDE 在重構的。
身為 JetBrains Taiwan 的 training partner,總是要有點功力才能撐得起這個資格啊。
--
※ 影片網址:https://www.youtube.com/watch?v=zO-NnNC-xyg&feature=youtu.be&ab_channel=JoeyChen
我不定時會錄一些技術相關的影片,有興趣就來按一下小鈴鐺訂閱吧。
※ GitHub commit history: https://github.com/tdd-best/strategy-sample/commits/video
※ 想要了解更完整的來龍去脈,想要讓自己能動手作到一樣的事,想要玩比這範例更進階、更實務的重構與 TDD,2021 年五月的梯次,只剩下 4 個名額啦:https://tdd.best/courses/tdd-continuous-refactoring-2021-05/
話說這個梯次我拍胸脯保證 100% 會額滿的,因為我正在翻譯相關的經典書,屆時會補上更多相關的內容。
#IntelliJ
#Refactoring
#StrategyPattern
java cache 在 BorntoDev Facebook 的最讚貼文
🔥 "อยากสร้างแอปบนมือถือ เริ่มต้นยังไง ? มีทางเลือกอะไรบ้าง ? มาดูไปพร้อมกันเลยย" 🔥
.
สำหรับวันนี้แอดและทีมงานได้สรุปภาพรวมของการสร้างแอปมือถือ 1 ตัว ว่าสามารถใช้อะไรในการพัฒนาได้บ้างนะ ?
.
เพราะปัจจุบันได้ยินมาเยอะแยะหลายรูปแบบจนชวนปวดหัวไปหมดดด
.
ซึ่งวันนี้จะมาอธิบาย สรุปแต่ละตัวว่าแตกต่างกันยังไง ทั้ง Native Apps, Mobile Web Apps, Hybrid Apps, Progressive Web Apps, React Native Apps และสุดท้าย Xamarin Native Apps <3
ถ้าพร้อมแล้วมาเริ่มที่ตัวแรกกันเลยย
.
✅ Native Apps ⭐
.
App ที่เน้นไปที่การพัฒนามาเพื่อใช้กับอุปกรณ์ใดอุปกรณ์ชนิดใดชนิดหนึ่งเท่านั้น App ชนิดนี้จะเข้าถึงทรัพยากรที่จำเป็นในการใช้งานของอุปกรณ์นั้นๆได้อย่างมีประสิทธิภาพ
.
ทำให้ App ที่ออกมาเร็ว และมีฟังก์ชันที่หลากหลาย แต่ก็มีข้อเสียคือไม่สามารถใช้งานกับอุปกรณ์ชนิดอื่นได้ เช่น App สำหรับ Android ไม่สามารถใช้กับ iOS ได้ และมี cost ในการพัฒนาที่สูง
.
ตัวอย่างเทคโนโลยี
iOS: Xcode, Swift, Objective-C
Andorid: Java, Kotlin,
.
✅ Mobile Web Apps ⭐
.
App ที่พัฒนาเหมือนการพัฒนา Website ที่แสดงผลบน browser แต่เน้นในการที่สามารถใช้บนอุปกรณ์มือถือได้อย่างมีประสิทธิภาพ
.
App ประเภทนี้การพัฒนาจะมีราคาถูกกว่า Native และใช้ได้หลาย platform แต่ก็แลกกับการที่มีฟังก์ชันน้อย เพราะไม่สามารถเข้าถึงทรัพยากรในเครื่องได้เท่า Native เช่น กล้องถ่ายรูป และต้องใช้ internet ในการเข้าถึง
.
ตัวอย่างเทคโนโลยีที่ใช้
HTML, CSS, Javascript, JQuery, Ruby
.
✅ Hybrid Apps ⭐
.
App ที่เป็นส่วนผสมระหว่าง Mobile Web App และ Native Web App โดยจะสามารถใช้ทรัพยากรในเครื่องได้เหมือน Native และแสดงผลเหมือน Website เหมือน Mobile Web App
.
โดยจะเป็น application ที่สามารถติดตั้งผ่าน store ได้เลย และสามารถรันข้าม platform ได้ แต่ความสามารถก็จะไม่เท่า native และราคาไม่ถูกเท่ากับ Mobile App และยังต้องใช้ internet ในการเข้าถึงอยู่
.
ตัวอย่างเทคโนโลยีที่ใช้
HTML, CSS, Javascript, Cordova, Ionic
.
✅ Progressive Web Apps ⭐
.
App ที่คล้ายกับ Mobile Web App โดยมีแนวคิดว่าเป็น Application ที่ผู้ใช้งานไม่จำเป็นต้องติดตั้งและขอ permission ผ่าน store และสามารถทำงานได้เหมือน Application ทั่วไป โดยเราสามารถเข้าถึงได้ผ่าน browser เหมือน Mobile App
.
และสามารถเซฟเก็บมาเป็น App ปกติได้ โดยไม่จำเป็นต้องติดตั้งผ่าน store บาง App สามารถเขียนให้ App เก็บ Cache ไว้ล่วงหน้าและสามารถรันได้โดยที่ไม่ต้องใช้ Internet เลยก็ได้
.
ตัวอย่างเทคโนโลยี
HTML, CSS, Javascript, JQuery
.
✅ React Native Apps ⭐
.
App ที่สร้างจาก framework JavaScript ที่ชื่อ React Native เป็นหลัก ซึ่งเป็น framework ที่พัฒนามาจาก React Js ที่เน้นการสร้าง Website มาต่อยอดเพื่อสร้างเป็น mobile App
.
โดยสามารถใช้ข้อดีจากการใช้ภาษา JavaScript และ component ของ React มาสร้างเป็น mobile app และสามารถใช้งานข้าม platform ได้
.
ตัวอย่างเทคโนโลยี
HTML, CSS, Javascript, ReactJs
.
✅ Xamarin Native Apps ⭐
.
App ที่สร้างจากเครื่องมือในการสร้าง mobile apps ชื่อ Xamarin ซึ่งรองรับการสร้าง mobile apps ข้ามแพลทฟอร์ม โดยเราสามารถใช้ภาษา C# ในการเขียน และตอน compile จะทำการเปลี่ยนให้เป็น Native Apps
.
ตัวอย่างเทคโนโลยี
C#, .net framework, Xamarin
.
⚡️ สุดท้ายนี้แอดอยากจะบอกว่า
.
"ไม่มีตัวไหนดีที่สุดหรอกฮะ ขึ้นกับประเภทของงานเราล้วน ๆ ถ้าประหยัด ไว ๆ ไปได้ทั้งหมดอาจจะเป็น Web App แต่นั่นแหละ ก็ไม่สามารถตอบโจทย์ในการใช้สิทธิ์บางอย่าง หรือ ความเร็วในการใช้งาน"
.
เหมือนในบทเพลง เพลงนึงที่เคยกล่าวไว้ว่า
.
"ได้..อย่าง.. ก็ต้องเสีย..อย่าง.." 😂
.
#BorntoDev - 🦖 Coding Academy ให้การพัฒนาเทคโนโลยีเป็นเรื่องง่ายสำหรับทุกคน
java cache 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最佳貼文
แปะและสรุปให้
ภาษา Java ดูเหมือนจะใช้ compiler เพราะคอมไพล์ได้ไฟล์ .class
ส่วน Python ดูเหมือนจะใช้ interpreter เพราะแปลแล้วรันจากโค้ด .py โดยตรง
.
แต่ทั้งสองภาษาเบื้องหลัง จะใช้ตัวแปรภาษาทั้ง compiler และ interpreter ด้วยกันทั้งคู่
.
ใน Java จะคอมไพล์ได้ไฟล์ .class (byte code) แล้วนำไปรันบน JVM (Java Visual Machine) ซึ่งเบื้องหลัง JVM จะใช้ interpreter แปลภาษาและรันจาก byte code ในที่สุด
.
ส่วน Python เบื้องหลังจะแอบคอมไพล์ได้เป็นไฟล์ .pyc (byte code) แล้ว cache เก็บไว้ จากนั้น PVM (Python Virtual Machine) จะใช้ interpreter แปลและรันจาก byte code ในที่สุด
.
ทั้งนี้ JVM ของ Java จุดประสงค์เพื่อให้คอมไพล์ครั้งเดียวแล้วทำงานข้าม platform
ขณะที่ PVM ของ Python มีไว้เพื่อความเร็วในการรัน (ใช้ interpreter อย่างเดียวจะช้า)
.
แปลและสรุปโดย โปรแกรมเมอร์ไทย thai programmer