เราจะลดเวลาการเขียนโค้ดลงได้อย่างไร ตอนที่ 2
ในตอนที่แล้วผมได้อธิบายถึงการลดเวลาการเขียนโค้ดโดยการสร้างระบบพื้นฐานที่พร้อมสำหรับการใช้งานไปแล้ว ตอนนี้ผมจะมาพุดถึงอีกเทคนิคหนึ่งที่ผมใช้
นอกจากระบบพื้นฐานที่เราสามารถเตรียมไว้ได้แล้ว การออกแบบโครงสร้างของโปรเจ็คก็สำคัญไม่น้อย เพราะมันสามารถทำให้เราสามารถ "นำกลับมาใช้ใหม่" ได้เหมือนกัน เทคนิคที่ว่าคือการออกแบบระบบที่เป็น โมดูล
ลองพิจารณาการออกแบบที่เป็นที่นิยมกันดู
ผมออกแบบให้คชสารเป็นโมดูล โดยหนึ่งไดเร็คทอรี่คือหนึ่งโมดูล ซึ่งข้อดีที่ได้รับคือ
นอกจากระบบพื้นฐานที่เราสามารถเตรียมไว้ได้แล้ว การออกแบบโครงสร้างของโปรเจ็คก็สำคัญไม่น้อย เพราะมันสามารถทำให้เราสามารถ "นำกลับมาใช้ใหม่" ได้เหมือนกัน เทคนิคที่ว่าคือการออกแบบระบบที่เป็น โมดูล
ลองพิจารณาการออกแบบที่เป็นที่นิยมกันดู
- หนึ่งไฟล์ที่สร้างขึ้นคือหนึ่งโมดูล เช่น document.php, news.php, board.php หมายถึงระบบบทความ ระบบข่าว หรือเว็บบอร์ด ที่สร้างขึ้นเพื่อใช้งาน และยังอาจมีไฟล์อื่นๆ ประกอบ ที่วางอยู่ภายใต้ไดเร็คทอรี่เดียวกัน (เช่นในไดเร็คทอรี่ Controllers)
- ไฟล์ประกอบอื่นๆ ที่อาจจะมีเพื่อใช้สำหรับหน้านั้นๆ เช่นหน้า submit form สำหรับการเขียนข่าว หรือ บทความ บางคนอาจ submit ไปที่เดียวกันเลย เพื่อลดจำนวนไฟล์
- ถ้าเลือกวิธีสร้างไฟล์เดียวแต่ทำหลายหน้าที่ การนำกลับมาใช้จะต้องมาคอยลบส่วนที่ไม่ได้ใช้ออก เช่น ระบบใหม่ต้องการระบบข่าว แต่ไม่ต้องการบทความ เราต้องมาคอยลบโค้ดส่วนที่ไม่เกี่ยวข้องออก (จริงๆ ไม่ลบก็ได้ แต่จะได้ขยะเพิ่มขึ้นในระบบ)
- มีแนวโน้มที่จะตั้งชื่อยาก เช่น อาจต้องสร้างไฟล์ชื่อ document_save.php และ news_save.php เพื่อทำหน้าที่แยกกันในแต่ละโมดูล
- การขยายระบบในอนาคตทำได้ยาก โดยเฉพาะหากต้องคำนึงถึงการนำกลับมาใช้ใหม่ ต้องพยายามตั้งชื่อไฟล์ให้ไม่ซ้ำกับโมดูลอื่นๆ
ผมออกแบบให้คชสารเป็นโมดูล โดยหนึ่งไดเร็คทอรี่คือหนึ่งโมดูล ซึ่งข้อดีที่ได้รับคือ
- เมื่อไดเรคทอรี่หนึ่งๆคือหนึ่งโมดูล การนำกลับมาใช้ใหม่ก็ง่าย โดยการนำไดเร็คทอรี่ของโมดูลมาติดตั้งเท่านั้น หากไม่ต้องการใช้ก็ลบไดเร็คทอรี่ออก
- หมดปัญหาเรื่องการตั้งชื่อไฟล์ เพราะแต่ละไฟล์อยู่ในไดเร็คทอรี่ของตัวเอง ทำหน้าที่ของแต่ละโมดูลเท่านั้น
- ชื่อไดเร็คทอรี่ใช้เป็น Namspaces ได้ด้วย ทำให้สามารถใช้งาน autoload ได้ด้วยตามมาตรฐาน PSR-4
โมดูลของคชสารจะถูกติดตั้งลงในไดเร็คทอรี่ modules/ โดยในแต่ละโมดูลจะประกอบด้วย Controlles Models และ Views แยกกันในแต่ละโมดูล