ไม่ต้องหา cms ให้ยุ่งยาก แต่ทำระบบเองเลย มาดู 4 แนวคิดสถาปัตยกรรมเรียบง่ายที่จะทำให้ชีวิต Developer มีความสุขขึ้นกันคับ
| #1 · 13 มิถุนายน 2569 เวลา 07:50 น. | |
| หลายครั้งที่เราเริ่มโปรเจกต์ใหม่ เรามักจะตั้งคำถามว่า กูจะใช้เทคโนโลยีตัวตัวไหนดี? จนบางทีเราอาจจะลืมตั้งคำถามย้อนกลับมาที่จุดเริ่มต้นว่า โจทย์ของเราจริง ๆ แล้วมันต้องการความซับซ้อนขนาดนั้นเลยหรือเปล่าวะ? เช่น บางคนลง wordpress แต่ใช้นิดเดียว ซึ่งโคตรจะไม่เป็นจำเลย แต่ไม่ใช่ว่า wordpress ไม่ดีนะ คือถ้าเราใช้เป็น optimize ได้ มันก็ไวได้เหมือนกัน แต่ยังไงก็สู้เราออกแบบเองเท่าที่เราจำเป็นต้องใช้ครับ วันนี้ผมอยากมาชวนพูดคุยและแบ่งปัน 4 แนวคิดในการออกแบบสถาปัตยกรรมเว็บไซต์ ที่ผมเชื่อว่าจะช่วยลดความซับซ้อน ช่วยให้เราไล่บั๊กจบได้ในไม่กี่นาที และทำให้ชีวิตการเขียนโค้ดในทุก ๆ วันมีความสุขขึ้นครับ 1. การแยกส่วนความรับผิดชอบ แนวคิดนี้คือหัวใจหลักที่ผมยึดถือเลยครับ มันคือการบอกว่า โค้ดแต่ละส่วนควรทำหน้าที่ของตัวเองอย่างชัดเจนและไม่ก้าวก่ายกัน ผมอยากให้ลองนึกภาพการแยกโค้ดหลังบ้าน (Backend) อย่าง PHP ที่จัดการเรื่องสิทธิ์และ Session ออกจากหน้าบ้าน (Frontend) อย่าง CSS ที่จัดการเรื่องความสวยงามอย่างเด็ดขาด มันช่วยลดความซับซ้อนไปได้มหาศาลเลยครับ เวลาที่เราต้องการแก้ไขดีไซน์ เราก็แก้แค่ CSS โดยไม่ต้องพะวงเลยว่าระบบล็อกอินหลังบ้านจะพัง หรือเวลาอัปเดตระบบหลังบ้าน หน้าตาเว็บก็ยังทำงานได้ปกติเหมือนเดิม 2. ปรัชญาความเรียบง่าย Keep It Simple, Stupid ถือเป็นปรัชญาการออกแบบที่ทรงคุณค่ามากนะครับผม เพราะระบบที่ดีที่สุดบางครั้งคือระบบที่เรียบง่ายที่สุด สมมติคุณจะทำแค่เว็บหน้าเดียวแต่คุณติดตั้ง Wordpress คำถามคือ มันจำเป็นหรอ? ซึ่งถ้าโจทย์ของเรามันสามารถตอบโจทย์ได้ด้วยไฟล์ดิบ ๆ ไม่กี่ไฟล์ การเขียนโค้ดแบบตรงไปตรงมาจะเผยให้เห็นความงามของตรรกะที่ไร้ความซับซ้อนซ่อนอยู่ครับ หลังบ้านไม่มีอะไรให้มันยุ่งยาก และเวลาเกิดปัญหาขึ้นมา เราจะสามารถไล่เช็กและปิดจ็อบบั๊กได้ภายในไม่กี่นาที และยิ่งถ้าเราวางโครงสร้างไว้ดี แยกฟังก์ชั่นชัดเจน เวลาส่งให้เอไอช่วยตรวจและแกะไฟล์ มันจะทำให้เราทำงานง่ายขึ้นด้วย 3. การลดความผูกมัดของโค้ด แปลเป็นไทยง่าย ๆ คือ การทำให้โค้ดพึ่งพากันน้อยที่สุด ..ลองเปรียบเทียบระหว่างโค้ดที่ผูกกันแน่น (Tight Coupling) ที่เวลาจะแก้หน้าตาเว็บทีต้องเปิดไฟล์ PHP ไปรื้อตรรกะข้างใน กับโค้ดที่เป็นอิสระต่อกัน (Decoupled) ที่ไฟล์อย่าง logout.php กับไฟล์ CSS แทบจะไม่ต้องรู้จักกันเลย ต่างคนต่างทำงานในมิติของตัวเอง เมื่อโค้ดไม่ผูกมัดกัน ชีวิตโปรแกรมเมอร์จะมีความสุขขึ้นมาก เพราะเราส่งงานได้ไวขึ้น และไม่ต้องมานั่งระแวงผลกระทบเป็นโดมิโน ซึ่งจริงๆ มันก็ขึ้นอยู่กับความถนัดนะครับ เช่นบางคนรวม Function ไว้ที่เดียวกันเลย และเวลาจะเรียกใช้ ก็ไปดู function ที่แยกเอาไว้ แล้วเรียกมาใช้ทันที แต่บางคนอาจเลือกที่จะเอาฟังก์ชั่นไว้ในโฟลเดอร์ที่ต้องใช้ และถ้าจะใช้ฟังก์ชั่นลักษณะเดียวกันก็ค่อยก็อปไปวางไว้ในอีกโฟลเดอร์ที่ต้องใช้ ไม่งงใช่ไหมครับ 5555+ 4. หลักการทำงานสิ่งเดียว หลักการนี้เรามักได้ยินจากมาตรฐาน SOLID ของฝั่ง OOP ของ Uncle Bob ก็คือ แยกหน้าที่, ขยายได้, แทนที่ได้, แยกส่วนใช้ และมีตัวกลาง นั่นเองครับ .. แต่จริง ๆ มันนำมาปรับใช้กับการเขียนเว็บทั่วไปได้ดีมากครับ นั่นคือ หนึ่งไฟล์ หรือหนึ่งฟังก์ชัน ควรมีเหตุผลในการแก้ไขเพียงข้อเดียวเท่านั้น ตัวอย่างที่ชัดเจนคือไฟล์ logout.php ที่มีหน้าที่แค่เตะคนออกจากระบบ พอหน้าที่มันชัดเจน วันหนึ่งถ้าเราอยากจะเพิ่มระบบเคลียร์คุกกี้จำรหัสผ่านเข้าไป เราก็เดินมาทำจบได้ในไฟล์นี้ไฟล์เดียว โดยไม่ลุกลามหรือสร้างความเสียหายไปไฟล์อื่น ๆ เลย สมมติถ้ามองโครงสร้างในโฟลเดอร์ xxx ที่ไล่จาก home -> ajax -> connect-ai ซึ่งมันคือการทำงานประสานกันแบบนักวิ่งผลัดตามหลัก SOLID เลยครับ โดย home ทำหน้าที่เป็นด่านหน้าคอยรับอินพุตและโชว์หน้าตาเว็บอย่างเดียว พอคนกดปุ่ม มันจะส่งไม้ต่อให้ ajax คอยทำหน้าที่เป็นสะพานเช็กสิทธิ์ความปลอดภัยเบื้องต้น ก่อนจะส่งคำถามไปให้ connect-ai ซึ่งทำหน้าที่เป็นสมองกลคอยคุยกับ API ของ AI ภายนอกโดยเฉพาะ และเมื่อได้คำตอบกลับมาก็จะส่งย้อนกลับไปโชว์ที่หน้าบ้านก็คือ Home ความเจ๋งของการแยกสามส่วนนี้ออกจากกันคือ โค้ดจะกลายเป็นอิสระต่อกันอย่างเด็ดขาด วันไหนที่ค่าย AI เปลี่ยนระบบใหม่ คุณเดินไปแก้แค่ไฟล์ connect-ai ไฟล์เดียวจบ โดยไม่ต้องระแวงว่าหน้าตาเว็บใน home จะเบี้ยว หรือระบบเช็ก Session ใน ajax จะพัง หรือถ้าอยากเปลี่ยนสีปุ่มเปลี่ยนดีไซน์ ก็แก้แค่ home โดยหลังบ้านไม่สะเทือน การวางโครงสร้างแบบนี้ทำให้ไล่บั๊กง่ายมาก แถมวันข้างหน้าถ้ามีหน้าเว็บใหม่โผล่ขึ้นมาแล้วอยากใช้ AI อีก คุณก็แค่สั่งให้หน้านั้นยิงมาเชื่อมกับ connect-ai ตัวเดิมได้ทันที โดยไม่ต้องเขียนโค้ดต่อสายหา AI ซ้ำอีกรอบให้เหนื่อยครับ เห็นมั้ยว่า connect-ai มันก็คือตัวกลาง และการแบ่งแยกหน้าที่แบบนี้ ข้อดีคือ พังตรงไหน แก้ตรงนั้น เรารู้ได้ทันทีครับ แต่นี่ก็เป็นวิธีการหนึ่งเท่านั้น ขึ้นอยู่กับรูปแบบภาษาที่ใช้เขียนและสไตล์ของแต่ละคน สุดท้ายนี้ การออกแบบโครงสร้างเว็บที่ดีสำหรับผม จึงไม่ใช่เรื่องของการอวดความอลังการของเทคโนโลยี แต่เป็นเรื่องของการสร้างระบบที่เข้าใจง่าย เป็นระเบียบ และพร้อมรับมือกับการเปลี่ยนแปลงในอนาคตได้อย่างมั่นคง และที่สำคัญคือ ในยุคเอไอ จะทำให้เราสามารถส่งโค้ดทีละส่วนหรือทีละหน้าให้เอไอ ช่วยแกะ ว่าจะต้องไปดูตรงไหน แล้วก็ส่งให้เอไอเช็ค ซึ่งมันจะง่ายขึ้นมากครับ เพื่อน ๆ มีมุมมองเกี่ยวกับเรื่องนี้อย่างไร หรือมีเทคนิคการจัดโครงสร้างโค้ดแบบไหนที่รู้สึกว่ามันดี มาแลกเปลี่ยนความเห็นกันได้นะครับ #WebDevelopment#CodingStandard#SoftwareArchitecture#CleanCode#WebDesign#DeveloperLife My Name IS Aun | |
เข้าสู่ระบบด้วย Google เพื่อร่วมตอบกระทู้ — กดปุ่มเดียวจบ ไม่ต้องสมัครอะไรเพิ่ม
