> For the complete documentation index, see [llms.txt](https://www.saladpuk.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://www.saladpuk.com/basic/solid/intro.md).

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

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

{% embed url="<https://www.youtube.com/watch?v=lQSOwFtYrOU&list=PLUjAn8nwWniiCUZtTOEHPWHw0WxpdH3DX&index=2>" %}

## 🎯 สรุปสั้นๆ

### 👨‍🚀 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

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

### 👨‍🚀 Coupling

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

### 👨‍🚀 Cohesion

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

{% hint style="success" %}
**Coupling & Cohesion**\
หลักพื้นฐานในการออกแบบซอฟต์แวร์คือ ลดการเกิด coupling และเพิ่ม Cohesion ให้ได้มากที่สุด
{% endhint %}
