GORAGOD.com

เขียน PHP ธรรมดากับแบบ Framework แบบไหนดีกว่ากัน

ก่อนจะอ่านบทความนี้ ตกลงกันก่อนนะครับว่าบทความนี้ เป็นความคิดเห็นส่วนตัวของผู้เขียน โดยอาศัยประสบการณ์ของตัวเองที่ผ่านมา ซึ่งผ่านการใช้งานมาแล้วทุกรูปแบบตั้งแต่การอออกแบบเองทั้งหมดตั้งแต่เริ่มต้น (PHP ล้วน) ตลอดจนการสร้าง PHP Framework ขึ้นใช้งานเอง และยังมีโอกาสได้ปรับปรุง แก้ไข โค้ดที่เขียนโดยหลายๆท่านอีกด้วย

อธิบายคำว่า Framework กันก่อน ว่ามันหมายถึงอะไร
Framework แปลตรงๆคือ "กรอบการทำงาน" ซึ่งในความเป็นจริง มันไม่ได้มีเพียงแต่ MVC ที่เราคุ้นเคยหรือถกเถียงกันอยู่เพียงอย่างเดียว เพราะ MVC เป็นเพียงสถาปัตยกรรมหนึ่งของ Framework เท่านั้น ยังมี Framework อีกหลายรูปแบบที่เราไม่คุ้นเคย

Framework รูปแบบหนึ่งที่ผมแนะนำอยากให้ใช้กัน ซึ่งสามารถทำได้ด้วยตัวเอง คือ "ข้อตกลงกันในทีม" หรือ "รูปแบบการเขียนโปรแกรม" (ในกรณีที่ทำคนเดียว) ซึ่งสิ่งเหล่านี้สำคัญกว่าการเลือก Framework มาใช้งานซะอีก ข้อตกลง(หรือรูปแบบ) จะช่วยให้การทำงานตลอดทั้งโปรเจ็ครวมถึงในทีม ทำได้อย่างราบรื่น ยกตัวอย่างเช่น การกำหนดให้ใช้ layout ตามรูปแบบที่กำหนดไว้เท่านั้น สิ่งที่เราจะได้ก็คือ
  1. ทุกๆหน้า มีรูปแบบที่สอดคล้องกันทั้งหมด ถึงแม้จะออกแบบโดยคนละทีมกันก็ตามที ทำให้ผลงานที่ได้ไม่ว่าออกแบบโดยใครก็จะเป็นเอกลักษณ์เดียวกัน
  2. ทำงานเร็ว เนื่องจากไม่ต้องคิดเยอะ แค่หยิบไปใช้เท่านั้น รวมถึงอาจมีการออกแบบรอไว้แล้วได้อีกด้วย เวลาเอาไปใช้ก็แค่แก้ไขอีกเล็กๆน้อยๆ
  3. เรียนรู้งาย ต่อให้มีคนอื่นมาทำต่อก็สามารถเรียนรู้ได้ง่าย เพราะรูปแบบมันเป็นเอกลักษณ์อยู่แล้ว โครงสร้างหลักอาจไม่จำเป็นต้องเรียนรู้ เพราะสิ่งที่ต้องทำจริงๆคือการนำงานของตัวเองมาใส่
จะเห็นว่า ประโยชน์ทั้ง 3 ข้อในด้านบนคือสิ่งที่เราปราถนากันโดยทั่วไปจากการใช้ Framework อยู่แล้ว ซึ่ง Framework ที่ว่านี้ก็เป็นแค่เพียง "ข้อตกลงในการทำงาน" เท่านั้น

นอกจากนี้ ยังมี Framework รูปแบบอื่นๆที่เป็นที่นิยม ถึงแม้ว่าคนทั่วไปจะลืมไปแล้วว่ามันก็เป็น Framework เหมือนกันเพราะมัวแต่ไปโฟกัสเอาเฉพาะ Framework ชื่อดังทั้งหลาย คือการใช้ Library ซึ่ง Framework จริงๆมันก็คือนำ Library หลายๆอันมารวมกันไว้เป็น Framework นั่นเอง

ถึงแม้ว่าเราจะไม่ได้ใช้ Framework ชื่อดังใดๆเลย เราก็ยังเขียน Library ของเราเองเพื่อใช้งานกันในทีมได้ ทีมแต่ละทีมก็ยังสามารถใช้ Library ของอีกทีมเพื่อลดการเขียนโค้ดลงได้ไม่แพ้การใช้ Framework อื่นๆ เขียนไปเขียนมา Library เยอะขึ้นก็รวมเป็น Framework ของตัวเองได้อีกเหมือนกัน

learning Curve หรือ อัตราการเรียนรู้ คืออีกเรื่องที่เถียงกันไม่จบไม่สิ้น ว่า แบบไหนจะต่ำกว่า (ออ...จริงๆเขียนแบบธรรมดามันก็ไม่ต้องเรียนรู้เพิ่มสินะ) ส่วนตัว ไม่ว่าใช้ Framework หรือไม่ ทุกโปรแกรมต้องมี Learning Curve ทั้งนั้น แต่ Learning Curve ที่ต่ำที่สุดผมยกให้ Framework ที่กำหนดเอง

ไม่ว่าคุณจะเคยเขียน Framework ใดๆ มาก่อน สิ่งที่คุณต้องทำอย่างแรกเมื่อเริ่มงานใหม่ คือ เรียนรู้สถาปัตยกรรมของที่ใหม่ด้วยกันทั้งนั้น ไม่มีใครสามารถมาถึงก็ทำได้เลยแน่ๆ เพราะสิงที่เรารู้ๆกันสำหรับ MVC คือ M เอาไว้ติดต่อกับหน่วยความจำ, View เอาไว้เขียน HTML และ C เอาไว้เขียน logic เท่านั้น ซึ่งถ้ามีโอกาสได้เปิดดูโค้ดของหลายๆคน จะเห็นว่าทุกๆคนก็มีวิธีเขียนในรายละเอียดที่แตกต่างกัน ซึ่งอันนี้คือ Learning Curve แรกที่ต้องมี สิ่งที่จะทำให้ Learning Curve ตรงนี้ต่ำสุดก็คือ การออกแบบ Framework ของตัวเองให้ชัดเจน คู่มือ หรืออื่นใดที่พอจะบอกได้ว่ากรอบการทำงานของทีมจะเป็นเช่นไร สิ่งเหล่านี้จะทำให้คุณไม่จำเป็นต้องรู้จัก Framework อื่นใดเลย นอกจาก Framework ภายในองค์กรที่ต้องใช้เท่านั้น เพราะสุดท้ายคุณก็คงต้องออกแบบไปในทิศทางที่กำหนดไว้เท่านั้น

ในการวางกรอบการทำงาน สิ่งที่ต้องคำนึงสูงสุดคือ การปฏิบัติตามมาตรฐานการเขียนโค้ด เพราะเอาเข้าจริงๆ สิ่งเหล่านี้ต่างหากคือ "มาตรฐาน" อย่างแท้จริง และมาตรฐานเหล่านี้ก็ถูกเขียนขึ้นมาเพื่อให้แนวทางการเขียนโค้ดไปในทางเดียวกันและสามารถอ่าน ตลอดจนทำความเข้าใจได้ง่ายด้วย

มาถึงตรงนี้หลายๆคนคงสงสัยว่า ตกลงผมเชียร์อันไหนกันแน่ ผมสรุปแบบง่ายๆเลยนะครับว่า จะเขียนด้วย PHP ธรรมดา หรือใช้ Framework ยี่ห้อไหนก็ได้ ไม่ผิดทั้งนั้น ทุกแบบสร้างงานได้เหมือนกัน แต่สิ่งที่จะทำให้ได้งานรวดเร็ว และสามารถส่งต่องานได้ง่าย คือ Framework ของตัวเองเท่านั้น

ในกรณีที่เป็นฟรีแล้นซ์ การกำหนด Framework ของตัวเอง จะช่วยให้เราจบงานใหม่ได้ไวกว่า ยกตัวอย่างเช่น เราอาจกำหนดรูปแบบโครงสร้างพื้นฐานในแบบของเราไว้ (ส่วนตัวผู้เขียนคือ การสร้าง GCMS CMS เป็นระบบพื้นฐานไว้) ซึ่งทำให้การเริ่มงานใหม่ผมไม่จำเป็นต้องเริ่มตั้งแต่ต้น ผมแค่ทำโมดูลมาใช้งานร่วมกับ GCMS เท่านั้น (งาน PHP ปกติ 1 เดือน ผมสร้างด้วย GCMS ใช้เวลาประมาณ 15 วัน) ส่วนในกรณีที่ทำเป็นทีม การสร้าง Framework ก็คือการสร้างข้อตกลงให้กับทีมนั่นเอง ยกตัวอย่างเช่น เราอาจตกลงกันว่า CSS ให้ใช้ GCSS เท่านั้นนะ Framework เราจะใช้ คชสาร และ Helper ต่างๆ จะต้องเอาไว้ที่ Gcms/ เท่านั้น และต้องเขียน doc กำกับด้วยทุกครั้ง ซึ่งการกำหนด Framework แบบนี้ต่อให้เปลี่ยนคนในทีมกี่ครั้งต่อกี่ครั้ง ก็ยังปฏิบัติงานได้ และแน่นอนว่าไม่จำเป็นเลยที่คนที่มาทำต่อจะต้องมีความรู้ Framework ใดๆมาก่อน