🤴
Design Patterns
Software Design
Design patterns เป็นแนวคิดในการแก้ปัญหาที่เราเจอบ่อยๆในการออกแบบซอฟต์แวร์ ซึ่งถ้าเรามี
ปัญหา
แล้วปัญหานั้นมีลักษณะตรงกับ pattern
ไหนก็ตาม เราก็จะสามารถนำแนวคิดของ pattern นั้นๆไปแก้ปัญหาของเราได้เลยPattern แต่ละตัวจะเป็นแค่
แนวคิดในการแก้ไขปัญหา
เท่านั้น ซึ่งมันไม่ได้บอกชัดเจนว่าเราต้องมีทำอะไรบ้างเพื่อจะแก้ปัญหาที่เจอ ดังนั้นวิธีการแก้ปัญหาที่เจอจะขึ้นกับการตัดสินใจของ developer เอง- เมื่อเกิดปัญหาในการออกแบบซอฟต์แวร์ สามารเอา pattern มาแก้ปัญหาได้เลย
- สามารถรับมือเมื่อเจอกับ business requirement ที่ซับซ้อนได้
- ลดการเกิด coupling, โค้ดยืดหยุ่นขึ้น, โค้ดนำกลับมาใช้ใหม่ได้
- Design pattern แต่ละตัวไม่ได้เข้าใจง่ายสำหรับ developer มือใหม่
- Developer ส่วนใหญ่จะนำ design pattern ไปใช้เลย โดยไม่ได้ชั่งน้ำหนักก่อนใช้ให้ดีก่อน ทำให้โค้ดมีความซับซ้อนเพิ่มขึ้นโดยไม่จำเป็น
คำเตือน
การนำ design pattern ไปใช้ไม่ใช่เรื่องเท่ เพราะมันมี cost (memory, processing overhead & complexity) ของมันค่อนข้างสูง ดังนั้นก่อนใช้ให้ ชั่งน้ำหนัก ข้อดี/ข้อเสีย ให้ดีก่อน ไม่งั้นโค้ดจะทำงานได้แต่ maintenance ยากขึ้นโดยใช่เหตุ ดังนั้นอย่าเมากาวแล้วตะบี้ตะบันเอา pattern ไปใช้เลยตลอดเวลา (อาตตามาเตือนแล้วนะ)
Pattern ทั้งหมดถูกแบ่งออกเป็น 3 กลุ่ม ตามวัตถุประสงค์ในการแก้ไขปัญหาของมัน โดยแต่ละกลุ่มจะช่วยให้โค้ดนั้น ลดการเกิด coupling, มีความยืดหยุ่นขึ้นและนำกลับมาใช้ใหม่ได้
ช่วยในการออกแบบเมื่อจะสร้าง object ต่างๆ
ช่วยในการออกแบบโครงสร้างของ class ต่างๆ
- Composite pattern
- Flyweight pattern
ช่วยในการออกแบบให้ class ต่างๆทำงานร่วมกัน
- Interpreter pattern
ตัว pattern ที่เหลือโอกาสใช้มันค่อนข้างต่ำมากถ้ามีเวลาผมจะมาทำต่อนะครับ
เนื้อหานี้ผมเคยเขียนครั้งแรกไว้ที่ Github ถ้าสนใจก็เข้าไปดูได้จากลิงค์ด้านล่างนี้เลยนะครับ
https://github.com/saladpuk/design-patterns
Last modified 3yr ago