Solid Principle

คืออะไร ดังมากใน OOD

SOLID Principle คือหลักการที่จะทำให้เราออกแบบระบบให้มัน Maintainable, Understandable, และ Flexible มากขึ้น เพราะว่าในกรณีที่ Codebase หรือระบบเรามันโตขึ้น บางครั้งการออกแบบไม่ดีทำให้มัน Maintain ได้ยาก การที่เราทำสิ่งนี้ไปตั้งแต่ต้นจะทำให้มันง่ายขึ้น

ประกอบไปด้วย 5 อย่าง

Single Responsibility Principle (SRP)

"Each class should have one reason to change"

"Each class in your system should have only one resposibility" คือแต่ละ Class (หรือก้อนๆนึงของระบบ) ควรจะรับผิดชอบแค่อย่างใดอย่างหนึ่ง ซึ่งการรับผิดชอบมัน หรือเหตุผลที่มันจะเปลี่ยนแปลงนั้น เรานี่แหละที่จะต้อง Define มันให้ชัดเจนว่าขอบเขตของ Class นั้นๆ คืออะไร รับผิดชอบเรื่องอะไร

public class Auth {
    public void login () {...}
    public void logout () {...}
}

จากตัวอย่าง Class Auth จะมีทั้ง Log in กับ Log out ถ้าเราลองคิดว่า

เคสแรก คลาสนี้มี 2 ความรับผิดชอบคือ Log in และ Log out เกิดวันไหนอยากเปลี่ยน logic ใน log in กับ log out ขึ้นมา ก็จะมี 2 reasons to change และยังเป็น 2 responsibilities อีก

เคสสอง มองว่ามีความรับผิดชอบเดียวคือรับผิดชอบเกี่ยวกับการ Auth ทั้งหมด ซึ่ง Log in และ Log out ก็คือความรับผิดชอบเดียวกันของ Auth

จะเห็นว่า ถ้าเรามองต่างกัน ก็จะเห็นว่ามันมี Responsibility ที่ต่างกันแล้ว ซึ่งจริงๆ ก็ถูกทั้งคู่ เราควรจะแบ่งในภาพใหญ่ก่อนว่าเราจะมีระบบอะไรบ้าง และค่อยมองว่าระบบนั้นมันมีอะไรที่รับผิดชอบบ้าง จะทำให้ Class มันไม่เจาะจงเกินไป และก็ไม่กว้างเกินไป เป็น Class ที่ยัง maintain ได้ เเละมีความ flexible เพียงพอ ซึ่งในเคสนี้เเนะนำว่าให้มองเป็นแบบเคสสอง แต่ก็จะแล้วแต่การใช้งานจริงๆ ไม่ได้มีนิยามที่แน่นอน

Reusability

ประโยชน์ที่เท่มากๆ ของการทำ Single Responsibility คือการที่มันทำให้โค้ด Reuse ได้ดีมากๆ เช่น

สมมุตว่าเรามีฟีเจอร์ A B C

ระบบ 1 ต้องใช้ฟีเจอร์ A และ B

ระบบ 2 ต้องใช้ฟีเจอร์ A และ C

ระบบ 3 ต้องใช้ฟีเจอร์ B และ C

ถ้าเรามองปกติโดยที่ไม่ได้ใช้อะไรเลย เราจะต้องเขียน 6 ฟีเจอร์ เพราะ A ของ 1 กับ A ของ 2 มันไม่เหมือนกัน อยู่คนละที่ แต่ถ้าเราทำให้ A B C เป็นคลาส เราจะสามารถเอาคลาสนั้นๆไป Reuse ได้ทุกระบบเลย

Last updated