มารู้จักกับ SOLID กันดีกว่า

💬 ก่อนที่จะออกวิ่งเล่นกัน ผมแนะนำว่ามารู้จักกับ SOLID Design Principles กันก่อนดีกว่าว่ามันคืออะไร และมีอะไรบ้างที่เราควรจะต้องรู้เพื่อใช้ทำความเข้าใจในคอร์สนี้นะฮั๊ฟ

🎯 สรุปสั้นๆ

👨‍🚀 SOLID Design Principles

คือคำย่อของหลักการออกแบบซอฟต์แวร์พื้นฐาน 5 ตัวตามรายชื่อด้านล่าง เพื่อให้โค้ดที่ออกมา เข้าใจได้ง่าย มีความยืดหยุ่นสูง โดยบุรุษในตำนาน Robert C.Marin หรือที่หลายๆคนรู้จักในนาม Uncle Bob ที่เป็นกลุ่มบุกเบิกสร้าง Agile manifesto ไงล่ะ

  • S — Single-Responsibility principle

  • O — Open/Closed principle

  • L — Liskov Substitution principle

  • I — Interface Segregation principle

  • D — Dependency Inversion principle

Cleancoder คือ blog ของหนึ่งในมหาเทพของวงการซอฟต์แวร์ ซึ่งป๋าแกจะมาสอนเรื่องต่างๆโดยเฉพาะการออกแบบซอฟต์แวร์ ซึ่งถ้าใครเคยฟังแกพูดจะรู้เลยครับว่า แกหลุดโลกไปแล้ว (ฮา) ป๋าแกเก่งจริงๆครับลอง search ชื่อแกใน Youtube ดูได้ผม +100 เลย https://blog.cleancoder.com

👨‍🚀 Coupling

คือคำที่ใช้เรียกเวลาออกแบบโค้ดที่ไม่ดี เพราะโค้ดที่เราเขียนมันไปผูกติดกันไว้ ซึ่งพอเราจะแก้ไขอะไรซักอย่างจะเป็นเรื่องยุ่งยากเช่น จะแก้ A แต่ B เรียกใช้ A อยู่เลยทำให้ต้องไปแก้ B ด้วย แล้วพอแก้ B เราก็พบว่า C เรียกใช้ B อยู่เลยทำให้เราต้องแก้ C เป็นทอดๆอะไรทำนองนี้ ซึ่งในการออกแบบเราควรจะทำให้เกิด Coupling ให้น้อยที่สุด หรือเราเรียก Loose coupling นั่นเอง

👨‍🚀 Cohesion

คือคำที่ใช้เรียกเวลาออกแบบโค้ดที่ดี เพราโค้ดที่เราเขียนมันจะสอดคล้องไปในทิศทางเดียวกัน เช่น methods ทุกตัวในคลาสเครื่องคิดเลข มีหน้าที่ในการจัดการกับการคำนวณเท่านั้น จะเห็นว่า method พวกนั้นมันมีหน้าที่สอดคล้องกับคลาสเครื่องคิดเลขที่เอาไวสำหรับคำนวณ แต่ถ้าเครื่องคิดเลขดันมี method ชงกาแฟ ไรงี้จะเห็นว่าถ้าเราจะไปใช้งานเราก็คงจะ งง ว่าจะเรียกใช้ให้มันชงกาแฟเมื่อไหร่ และถ้าจะแก้ไข method นั้นบางทีเราอาจะหามันไม่เจอก็ได้

Coupling & Cohesion หลักพื้นฐานในการออกแบบซอฟต์แวร์คือ ลดการเกิด coupling และเพิ่ม Cohesion ให้ได้มากที่สุด