Design Pattern VS Anti Pattern
Design Pattern & Anti Pattern เป็นรูปแบบการแก้ไขปัญหา การออกแบบ Software ให้มีประสิทธิภาพและแก้ไขปัญหาได้ทันท่วงที ดังนั้นใครต้องการที่จะเป็นผู้พัฒนา Software ที่ดีควรจะต้องรู้จัก 2 คำนี้ครับ
นิยามทั้ง 2 อันนี้คนส่วนใหญ่คงจะคุ้นหูกับอันแรกมากกว่านั้นก็คือ Design Pattern นั้นเองโดย Design Pattern นั้นเกิดจากกลุ่ม Gang of four มาช่วยกันคิดว่า Pattern แต่ละอันนั้นช่วยแก้ปัญหาอะไรได้บาง โดยผมจะเปรียบเทียบง่ายๆคือ Design Pattern คือเทคนิคการป้องกัน โดยการกระทำต่างๆจะต้องคิดก่อนที่จะเกิดงาน (Application) อย่างเช่น Singleton , Factory , Observer พวกเหล่านี้จะต้องถูกคิดก่อนที่จะลงมือทำ หรือแก้ไขกับ Application ที่ยังมีอายุไม่มาก
ส่วน Anti Pattern เกิดขึ้นมาเพื่อแก้ปัญหาเฉพาะหน้าเดียวนั้นโดย การทำ Anti Pattern นั้นไม่แตกต่างอะไรกับการเขียน Code ที่ไม่ดี (มีที่ไหนเรียน Object Oriented แต่เขียนแต่ละ class เป็น 1 function) แต่ทว่าการเขียนแบบนี้ จะสามารถ Solve ปัญหาเฉพาะหน้าได้ทันทีไม่จำเป็นต้องมาวิเคราะห์อะไรต่างๆให้ซับซ้อน Anti Pattern เด่นๆที่เจอกันบ่อยๆคือ The Blob หรือการมี Class Controller เพียงตัวเดียวกับงานที่ต้องมีการควบคุมหลายๆตัว (แต่ถูกรวมเหลือตัวเดียว)
การที่เรามี Design Pattern กับ Anti Pattern คือการที่เราดูโลกแห่งความเป็นจริงงานบางงานไม่สามารถรื้อมาทำ Design Pattern ได้อย่างจริงๆจังๆเพราะระบบใหญ่และซับซ้อนมากการทำ Anti Pattern จะช่วยทำให้คุณทำงานต่อไปได้ง่าย เพราะ Anti Pattern ก็มีการ Reuse ระบบเก่าโดยการแบ่งเป็น Layer อีก Step หนึ่ง (ไม่ใช่ Design Pattern เพราะแก้ปัญหาเฉพาะหน้าและไม่ได้ทำการรื้อ Code เก่าเลยแม้แต่น้อย)
Design Pattern กับ Anti Pattern อันไหนดีกว่ากัน?
การที่เราออกแบบสร้าง Application ขึ้นมาสักตัวเราควรทำ Design Pattern ขึ้นมาเพื่อที่อนาคตเราจะได้แก้ไข้ปัญหาได้ง่ายและรวดเร็ว ส่วนถ้าเป็น Software ขนาดใหญ่ที่เราแก้ไขอะไรได้ยากแล้ว เราควรใช้ Anti Pattern ก่อนแล้วตามด้วย Design Pattern ของเรา สรุปว่าไม่มีอันไหนดีที่สุด ต้องขึ้นอยู่กับสถานการณ์ว่าควรใช้อันไหน ? แต่ที่นิยมคือ Design Pattern และบางคนอาจจะทำ Anti Pattern โดยไม่รู้ตัวด้วยซ้ำ……
เนื้อหาคล้ายกันที่น่าสนใจ



รู้สึกอ่านแล้วไม่ค่อยได้ความกระจ่างเท่าไหร่
Design Pattern กะ Anti Pattern เป็นเรื่องที่ต้องใช้เวลาเรียนรู้นานครับกว่าจะเข้าใจ คุณต้องรู้จัก OOP Concept และก็ OOAD ซึ่ง Design Pattern เป็นส่วนหนึ่งของ OOAD ดังนั้นถ้าผมจะสรุปสั้นๆก็คือ
Design Pattern เป็นการคิดแก้ปัญหาก่อนที่จะเกิด Application
Anti Pattern เป็นการแก้ปัญหาเฉพาะหน้าที่เกิดขึ้นมา โดยมีเวลาจำกัด
โดยส่วนมาก Anti Pattern จะไม่ค่อยมีการนำมาพูดถึงนัก ถ้าไม่ใช่งานที่รีบเร่งจริงๆ
ผมว่า Design Pattern คือการนำเสนอวิธีที่ถูกที่ควรทำตาม ขณะที่ Anti-pattern คือ การนำเสนอวิธีการที่ทำให้ได้ผลลัพธ์ที่แย่เอามากๆ ซึ่งควรหลีกเลี่ยง
ถ้าสรุปง่ายคือ ทั้งสองมันเหมือนกัน
ต่างกันที่ Pattern จะเสนอใน positive
ขณะที่ AntiPattern จะเสนอในรูป negative
ทั้งที่เป็น context เดียวกันน่ะครับ
จากการศึกษาพบว่า Pattern นั้นเหมาะสมในการนำไปใช้สอนมากกว่า AntiPattern ครับ เพราะลดความสับสนในการใช้งานได้มากกว่า AntiPattern ครับ
แต่อย่างไรก็ตามก็ขึ้นกับความเหมาะสมของงานครับ