ใครอยู่แวดวงการออกแบบ, พัฒนาซอฟต์แวร์, สร้างเกม ฯลฯ น่าจะเคยได้ยินคำว่า "Framework" กันมาบ้าง มันเป็นเครื่องมือ หรือโครงสร้างสำคัญ ที่ช่วยให้การพัฒนาเป็นระบบ และมีประสิทธิภาพมากขึ้น ทำให้ Framework เป็นสิ่งขาดไปไม่ได้เลยสำหรับนักพัฒนาในปัจจุบันนี้
Framework ไม่เพียงแต่จะช่วยให้นักพัฒนาสามารถสร้างซอฟต์แวร์ได้อย่างมีประสิทธิภาพมากขึ้นเท่านั้น แต่ยังช่วยให้รักษาความสม่ำเสมอในการทำงานแบบทีมอีกด้วย ในบทความนี้ เราจะมาแนะนำให้คุณผู้อ่านรู้จัก Framework ในด้านต่างๆ ให้มากขึ้นกัน ...
Framework เป็นคำที่ในภาษาไทยก็จะใช้ทับศัพท์กันไปเลย แต่ถ้าจะแปลก็จะหมายความว่า "กรอบ"
มันเป็น "ส่วนประกอบของซอฟต์แวร์ที่สามารถนำกลับมาใช้ใหม่ได้" ที่ช่วยนำเสนอ "โครงสร้าง" สำหรับการพัฒนาแอปพลิเคชัน ประกอบด้วยโครงสร้าง, กฏ และแนวทาง ที่ถูกเตรียมไว้ล่วงหน้า เพื่อให้นักพัฒนาเริ่มต้นงานใหม่ได้โดยง่าย ไม่จำเป็นต้องเริ่มต้นใหม่จากศูนย์ และช่วยเพิ่มประสิทธิภาพในการพัฒนาอีกด้วย
ตามปกติแล้ว Framework จะประกอบไปด้วย เครื่องมือ (Tools), ไลบรารี (Library), ส่วนต่อประสานโปรแกรมประยุกต์ (API) ที่ช่วยให้กระบวนการพัฒนาง่ายขึ้น เพราะฟังก์ชันการทำงานทั่วไปต่าง ๆ จะถูกเตรียมไว้พร้อมให้นักพัฒนาหยิบไปใช้งานได้เลย เช่น การจัดการ Input/Output, เชื่อมต่อ ฐานข้อมูล (Database), การแสดงผลของ ส่วนต่อประสานกับผู้ใช้ (User Interface), ระบบเครือข่าย (Network) ฯลฯ
ด้วยการนำ Framework มาใช้งาน นักพัฒนาจะสามารถให้ความสำคัญกับการออกแบบระบบให้เหมาะสมกับตรรกะของตัวธุรกิจเพียงอย่างเดียว แทนที่จะต้องมาเสียเวลาสร้างคุณสมบัติที่มีอยู่แล้วขึ้นมาใหม่
Framework มีหลากหลายรูปแบบ มันถูกปรับให้เหมาะสมกับภาษาการเขียนโปรแกรม และแพลตฟอร์มต่าง ๆ ตัวอย่างเช่น Django และ Ruby on Rails สำหรับการพัฒนาเว็บไซต์, TensorFlow และ PyTorch สำหรับ การเรียนรู้ของเครื่องจักร (Machine Learning), Unity และ Unreal Engine สำหรับการพัฒนาเกม, Spring และ Hybernate สำหรับการพัฒนา Java Enterprise Application
Gameplay Framework ใน Unreal Engine
ภาพจาก : https://dev.epicgames.com/documentation/en-us/unreal-engine/gameplay-framework-in-unreal-engine
แนวคิดของ Framework เริ่มปรากฏเป็นครั้งแรกในช่วงระหว่างปลายทศวรรษ ค.ศ. 1960 ถึงต้นทศวรรษ ค.ศ. 1970 (พ.ศ. 2503 - 2513) เพื่อตอบสนองต่อความซับซ้อนที่เพิ่มมากขึ้นในการพัฒนาซอฟต์แวร์ ในช่วงเวลานั้น นักพัฒนาซอฟต์แวร์เริ่มตระหนักถึงความจำเป็นในการมีส่วนประกอบที่สามารถนำกลับมาใช้ใหม่ได้ และเพื่อเป็นการสร้างให้เกิดมาตรฐาน ซึ่งจะช่วยลดความซับซ้อนของกระบวนการพัฒนาซอฟต์แวร์ด้วย
หนึ่งในผู้บุกเบิกการพัฒนาซอฟต์แวร์ในรูปแบบ Framework คือ Douglas C. Engelbart Engelbart ชายผู้ที่มักจะถูกเรียกว่าเป็น "บิดาของ เมาส์ (Mouse)" เขามีวิสัยทัศน์เกี่ยวกับระบบคอมพิวเตอร์ที่สามารถทำงานร่วมกันได้ และพัฒนา NLS (oN-Line System) ระบบการทำงานร่วมกันทางคอมพิวเตอร์ ขึ้นมาในทศวรรษที่ ค.ศ. 1960 (พ.ศ. 2503)
ภาพจาก : https://americanhistory.si.edu/collections/object/nmah_1761515
NLS สามารถถือได้ว่าเป็นหนึ่งในตัวอย่างแรก ๆ ของซอฟต์แวร์ Framework เนื่องจากมันมีการเตรียมชุดของเครื่องมือ และส่วนประกอบ สำหรับใช้พัฒนาแอปพลิเคชัน และจัดระเบียบข้อมูล
ผู้มีบทบาทอีกคนหนึ่งที่สำคัญต่อการพัฒนา Framework คือ ศูนย์วิจัยพาโลอัลโต Xerox Palo Alto Research Center (PARC) ในช่วงทศวรรษที่ ค.ศ. 1970 (พ.ศ. 2513) PARC เป็นศูนย์กลางของนวัตกรรมที่ผลิตเทคโนโลยีที่เปลี่ยนแปลงวงการหลายอย่างออกมามากมาย
Alan Kay และทีมงาน ได้พัฒนา Smalltalk ภาษาโปรแกรมเชิงวัตถุ และชนชั้น (Object-Oriented Programming (OOP) ขึ้นมา แถมยังรวมรูปแบบของสถาปัตยกรรม Model-View-Controller (MVC) เข้าไว้ด้วย ซึ่งต่อมา Smalltalk ได้กลายเป็นรากฐานสำคัญของการสร้าง Framework ให้กับซอฟต์แวร์หลาย ๆ ตัว
ภาษาโปรแกรม Smalltalk ที่ถูกพัฒนาขึ้นที่ PARC โดย Alan Kay และทีมงานของเขา นำเสนอรากฐานสำหรับการเขียนโปรแกรมเชิงออบเจกต์ (OOP) Smalltalk ยังรวมรูปแบบทางสถาปัตยกรรม Model-View-Controller (MVC) ซึ่งต่อมากลายเป็นพื้นฐานสำหรับ framework ซอฟต์แวร์หลายๆ ตัว
การมาถึงของ ส่วนต่อประสานกราฟิกกับผู้ใช้งาน (GUI) ในช่วงทศวรรษ ค.ศ. 1980 (พ.ศ. 2523) เปรียบเสมือนเชื้อเพลิงที่มาจุดประกายให้การพัฒนาซอฟต์แวร์ Framework มีความก้าวหน้ามากยิ่งขึ้น OOP แบบ GUI เช่น MacApp สำหรับการพัฒนาบนเครื่อง Macintosh และ NeXTSTEP ซึ่งภายหลังพัฒนาเป็น Cocoa ที่ใช้ในการพัฒนาสำหรับ macOS และ iOS โดยมันได้เตรียมส่วนประกอบของฟังก์ชัน และ Library ที่สามารถนำกลับมาใช้ซ้ำได้ ให้นักพัฒนาสามารถนำไปใช้ในการสร้าง GUI ต่าง ๆ ได้โดยง่าย
ในด้านการพัฒนาเว็บไซต์ Framework Ruby on Rails ที่สร้างขึ้นโดย David Heinemeier Hansson ได้รับความสนใจอย่างมากในช่วงยุค ค.ศ. 2000 (พ.ศ. 2543) มันถูกพัฒนาขึ้นมาภายใต้แนวคิด "Convention Over Configuration" โดยเน้นความเรียบง่าย นักพัฒนาสามารถเรียกใช้ฟังก์ชันต่าง ๆ ได้ทันที โดยไม่ต้องเสียเวลาไปกับการตั้งค่าที่วุ่นวาย แนวคิดนี้ถูกใจนักพัฒนาเป็นอย่างมาก และส่งอิทธิพลต่อแนวทางการพัฒนา Framework ที่ถูกพัฒนาตามมาอีกมากมาย
Framework มีอยู่หลายประเภท ขึ้นอยู่กับลักษณะงานที่มันรองรับ มาดูตัวอย่างของ Framework ที่น่าจะพบเห็นกันได้บ่อยครั้งกัน
Framework ชนิดนี้ถูกออกแบบมาเพื่อทำให้การพัฒนา เว็บแอป (Web Application) ง่ายขึ้น โดยการเตรียมโครงสร้าง (Structure) และชุดเครื่องมือ (Tool) ส่วนใหญ่จะมีคุณสมบัติอย่าง Routing, การรวมฐานข้อมูล (Database Integration), การจัดการ Session และ การตรวจสอบผู้ใช้ (User Authentication) ตัวอย่างเช่น Ruby on Rails ที่ใช้รูปแบบสถาปัตยกรรม MVC และมีฟังก์ชันการทำงานในตัวมากมาย ทำให้มันเหมาะสำหรับการสร้างเว็บแอป
ภาพจาก : https://www.jetbrains.com/ruby/
เป็น Framework สำหรับการพัฒนาแอปพลิเคชันบนสมาร์ทโฟน ช่วยให้นักพัฒนาสามารถสร้างแอปพลิเคชันที่สามารถทำงานบนหลายแพลตฟอร์ม เช่น iOS และ Android โดยจะมีเครื่องมือสำหรับสร้าง UI, ระบบจัดการคุณสมบัติที่มีความเจาะจงต่อ ระบบปฏิบัติการ (OS), API, React Native ฯลฯ โดย Framework ประเภทนี้จะช่วยให้นักพัฒนาสามารถเขียนโค้ดเพียงรอบเดียว ก็สามารถนำไปใช้งานได้ทั้งสองแพลตฟอร์ม ทำให้ประหยัดเวลา และต้นทุน ในการทำงานไปได้อย่างมาก
ภาพจาก : https://reactnative.dev/
Framework ประเภทนี้เน้นการพัฒนาฝั่งลูกค้า (Client-Side) ของเว็บแอป (Web Application) โดยมุ่งเน้นไปที่ส่วนประกอบของ UI และการโต้ตอบ มี Library, เทมเพลต (Template) และเครื่องมือที่ช่วยสร้าง UI ให้ออกมาสวยงาม ตัวอย่างเช่น AngularJS ที่ช่วยในการเชื่อมต่อข้อมูล (Data Binding), สถาปัตยกรรมแบบแยกส่วน (Modular Architecture), Dependency Injection ฯลฯ ที่ช่วยให้การจัดการหน้า Front-End ที่ซับซ้อนทำได้ง่ายขึ้น
ในขณะที่ Front-End Framework เน้นไปที่การพัฒนาฝั่ง Client แต่ Back-End Framework จะเป็น Framework ที่ใช้ในการพัฒนาฝั่ง เซิร์ฟเวอร์ (Server) เพื่อจัดการงานต่าง ๆ เช่น การประมวลผลคำขอ (Request Processing), การรวมฐานข้อมูล (Database Integration), ระบบธุรกิจ นอกจากนี้ ยังมาพร้อมกับระบบบันทึกข้อมูล และเครื่องมือที่ช่วยในการดูแลระบบหลังบ้านต่าง ๆ เช่น การจัดการเส้นทาง (Routing Handling), บริหาร มิดเดิลแวร์ (Middleware) และการพัฒนา API
เป็น Framework สำหรับการทดสอบช่วยในการทำให้กระบวนการทดสอบซอฟต์แวร์ทำงานได้แบบอัตโนมัติ เพื่อตรวจสอบความน่าเชื่อถือ และความถูกต้องของโค้ด โดยจะมีเครื่องมือสำหรับทดสอบการทำงานของโค้ด, สร้างรายงาน ฯลฯ อย่างเช่น JUnit ซึ่งเป็น Framework ที่นิยมใช้ในการทดสอบแอปพลิเคชันที่พัฒนาด้วย Java
ภาพจาก : https://blog.jetbrains.com/idea/2020/09/writing-tests-with-junit-5/
เป็น Framework สำหรับการพัฒนาเกม ช่วยทำให้การสร้างวิดีโอเกมง่ายขึ้นด้วยชุดเครื่องมือ และฟีเจอร์ต่าง ๆ ไม่ว่าจะเป็น เอนจิ้นเกม (Game Engine), ระบบฟิสิกส์ภายในเกม, การจัดการทรัพยากร, การแสดงผล ฯลฯ ที่มีชื่อเสียงก็อย่างเช่น Unity ที่เตรียม Library จำนวนมากเอาไว้ให้นักพัฒนาเกมให้ใช้อย่างครอบคลุม
ภาพจาก : https://code.visualstudio.com/docs/other/unity
Machine learning Framework จะรวบรวมชุดอัลกอริทึม, เครื่องมือ และ Library ที่จำเป็นต่อการพัฒนาโมเดล Machine Learning, การเตรียมข้อมูล (Data Preprocessing), การฝึกโมเดล, ประยุกต์ใช้ ฯลฯ Framework ที่น่าจับตามองในตอนนี้ก็อย่างเช่น TensorFlow ที่รองรับการทำ การเรียนรู้เชิงลึก (Deep Learning), เครือข่ายประสาทเทียม (Neural Network) และ การประมวลผลแบบกระจาย (Distributed Computing)
เป็น Framework ที่ออกแบบมาเพื่อพัฒนาแอปพลิเคชันขนาดใหญ่ที่ต้องการฟังก์ชันที่ซับซ้อน และมีการบูรณาการกับระบบ มีคุณสมบัติสำหรับการรักษาความปลอดภัย, ขยายระบบ และสถาปัตยกรรมแบบโมดูล ตัวอย่างเช่น Java EE ที่เตรียมชุด API ที่จำเป็นต่อการพัฒนาแอปพลิเคชันระดับองค์กร ไม่ว่าจะเป็นการเชื่อมต่อกับฐานข้อมูล, ส่งข้อความ และบริการทางเว็บไซต์
ภาพจาก : https://www.researchgate.net/figure/Example-of-user-interface-elements-when-Java-EE-perspective-is-opened_fig1_308092719
Graphical User Interface Framework ช่วยการออกแบบ UI สำหรับแอปพลิเคชัน หรือซอฟต์แวร์เป็นเรื่องง่ายขึ้น ด้วยการเตรียมชุดเครื่องมือที่จำเป็นต่อการออกแบบ, การป้อนข้อมูลของผู้ใช้, จัดการเหตุการณ์ต่าง ๆ ที่ได้รับความนิยมก็อย่างเช่น QT ที่เป็น GUI Framework ที่สนับสนุนการพัฒนาแบบข้ามแพลตฟอร์ม ช่วยให้ได้แอปพลิเคชันที่ใช้งานได้แบบไร้รอย ไม่ว่าจะใช้งานบนระบบปฏิบัติการอะไรก็ตาม
ภาพจาก : https://appdevelopermagazine.com/qt-releases-version-5.7-of-its-c++-ui-development-framework-adding-3d-module/
แม้ Framework จะเหมือนมีแต่ข้อดี แต่เหรียญย่อมมี 2 ด้าน Framework ก็มีข้อจำกัดอยู่เช่นกัน
|
แอดมินสายเปื่อย ชอบลองอะไรใหม่ไปเรื่อยๆ รักแมว และเสียงเพลงเป็นพิเศษ |