Software Architecture
Technology

3 Software Architecture Design ที่นิยมใช้พัฒนาระบบซอฟต์แวร์ขนาดใหญ่

ในการออกแบบซอฟต์แวร์ขนาดใหญ่ในองค์กร มักจะมีการทำงานร่วมกันโดยคนจำนวนมาก หากเราต่างคนต่างเขียนซอฟต์แวร์ไปในทางที่ตัวเองเห็นว่าดี ซอฟต์แวร์ที่แต่ละคนทำก็อาจจะทำงานร่วมกันไม่ได้หรือมีปัญหาตอนที่ Integrate เป็น Solution ใหญ่ ดังนั้น การทำซอฟต์แวร์ในระดับนั้นจึงจำเป็นต้องมีการแบ่งสันปันส่วน และมีการออกแบบ Software Architecture เพื่อให้ทำงานร่วมกันได้ดีและมองเห็นภาพรวมไปในทางเดียวกัน ทั้งระหว่างนักพัฒนาในทีมพัฒนากันเอง และระหว่างทีมพัฒนาและทีมธุรกิจ รวมไปถึงทีมอื่นๆที่เกี่ยวข้อง นอกจากนี้หลังพัฒนาเสร็จยังต้องสามารถดูแลต่อได้ทั้งงานซัพพอร์ต แก้ไขปัญหาบั๊ก และการพัฒนาต่อยอดเพิ่มเติมได้ในอนาคต

องค์ความรู้ Software Architecture Design เป็นหนึ่งใน Hard Skill ที่เชื่อมกับ Soft Skill สำคัญของ Programmer ที่ควรเรียนรู้ หากคุณต้องการเติบโตในสายงาน Tech ไม่ว่าจะเป็น Senior Software Developer หรือ Tech Lead ซึ่งสำคัญมาก ๆ ที่ต้องมองภาพรวมของโครงสร้างระบบให้ออก โดยเฉพาะ Programmer ที่ต้องพัฒนาซอฟต์แวร์อยู่บนระบบขนาดใหญ่ในระดับองค์กร

เรามาดู 3 Software Architecture Patterns พื้นฐานที่นิยมใช้ในการออกแบบซอฟต์แวร์ขนาดใหญ่ โดยเน้นไปที่เรื่องของรูปแบบการร่วมมือ (Collaboration Pattern) ต่าง ๆ จะมีข้อมูลน่าสนใจยังไงบ้างไปดูกันเลย

Specialist Collaboration

Software Architecture

Specialist Collaboration

ในการพัฒนาซอฟต์แวร์ระบบขนาดใหญ่ที่มีหลายส่วนการทำงานของทีม Developer หลาย ๆ ทีม (Specialist Team) รวมกัน ทำให้มี Class หรือ มี Object จำนวนมากในระบบจึงต้องมีการจัดกลุ่ม เพื่อที่จะสามารถแบ่งโค้ดส่วนต่าง ๆ ได้อย่างเป็นระเบียบ ให้ทีม Developer ทำงานร่วมกันได้ง่ายขึ้น

เพราะระบบซอฟต์แวร์ขนาดใหญ่ย่อมมีการพัฒนาระบบอยู่สม่ำเสมอ เพื่อแก้ไขปัญหาต่าง ๆ ที่เกิดขึ้น หรือ พัฒนาต่อยอดระบบให้การใช้งานดีขึ้นไม่ว่าจะเป็นฝั่ง Front End, Back End หรือ Database การพัฒนาหรือการแก้ไขบางอย่าง อาจสร้างผลกระทบกับโค้ดส่วนอื่น ๆ ที่เกี่ยวข้องได้ นักพัฒนาจึงต้องออกแบบโครงสร้างจัดกลุ่มให้กับโค้ดส่วนต่าง ๆ เพื่อให้ทีม Developer มองภาพรวมของโค้ดหลาย ๆ ส่วน จัดสรรเป็นระเบียบมากขึ้น นอกจากจะช่วยให้การพัฒนาต่อยอดง่ายขึ้นแล้ว การแก้ไขหรือวิเคราะห์ปัญหาก็สามารถทำได้ทันทีไม่ต้องงมโค้ดหลายแสนบรรทัดให้เสียเวลา และช่วยให้ทีม Developer แต่ละทีมสามารถสื่อสารทำงานได้อย่างราบรื่น การทำงานเป็นทีม Productive มากขึ้น

โดยมีคอนเซปที่ใช้กันในการออกแบบ Software architecture ดังนี้

N-Tier Architecture

การแบ่ง Class ออกเป็นจำนวน Tier หลาย ๆ ชั้น โดยจะมีการจัดระดับ Tier ที่อยู่ระดับสูงกว่าจะได้รับผลกระทบเมื่อมีการแก้ไข Class ที่อยู่ในกลุ่ม Tier ที่อยู่ระดับต่ำกว่า ทำให้เมื่อนักพัฒนาต้องมีการแก้ไข หรือ พัฒนาต่อยอดโค้ดส่วนไหนของระบบ ทำให้สามารถตรวจสอบได้ว่าจะมีระบบส่วนไหนที่ได้ผลกระทบบ้าง นักพัฒนาจะมองเห็นเป็นสัดส่วนโดยการจัดกลุ่มของ N-Tier Architecture โดยมีคอนเซปที่นิยมใช้ดังนี้

  • MVC หรือ Model View Controller

การออกแบบโครงสร้างให้มีระบบ Core System ที่สามารถ Input / Output ข้อมูลไปยังหลายระบบได้ โดยออกแบบให้มี Layer ที่จะช่วยเป็นตัวกลางแปลงข้อมูลให้ระหว่างระบบที่ต้องทำงานร่วมกันได้ โดยรูปแบบ MVC จะเน้นเรื่องของการทำงานเชื่อมต่อกันทั้งในระบบภายในที่มีหลายส่วน

  • Clean Architecture

เกิดจากระบบขนาดใหญ่ที่มี Module ภายนอกจำนวนมากเข้ามามีส่วนร่วม โดยการเขียน Dependency rule เพื่อกำหนดให้ส่วน Adaptor เขียนตามระบบของ 3rd party ทำให้สามารถแบ่งส่วนของ 3rd party จำนวนมากได้ เมื่อ 3rd party มีการเปลี่ยนแปลง ทำให้นักพัฒนาสามารถแก้ไขแค่เฉพาะ Adaptor ไม่ต้องแก้ไขในส่วนระบบภายใน ช่วยลดโอกาสการเกิดผลกระทบกับระบบส่วนอื่น ๆ

Business Collaboration

Software Architecture

Business Collaboration

นอกจากทีม Developer จะต้องทำงานร่วมกันกับทีม Developer หลากหลายทีมแล้ว ทีม Business ก็เป็นอีกทีมหนึ่งที่ต้องมีการร่วมงานกัน เพื่อกำหนดให้ระบบซอฟต์แวร์สามารถทำงานตามจุดประสงค์ของ Business model ขององค์กรอีกด้วย อีกทั้งยังต้องออกแบบโครงสร้างให้ทีม Developer และ ทีม Business สามารถใช้ทำงานร่วมกัน มองเห็นภาพรวมไปในทิศทางเดียวกันได้ ทำให้การสื่อสารระหว่าง 2 ทีมมีประสิทธิภาพมากขึ้น โดยมีคอนเซปที่ใช้กันคือ

Domain Driven Design หรือ DDD

แบ่งออกเป็น 3 ขั้นตอนได้แก่

  • Domain Discovery

คือวิธีการก็บ Requirement ของ Business ออกมาให้เป็นภาพที่จะสามารถเขียนออกแบบเป็นโครงสร้างพัฒนาซอฟต์แวร์ได้ง่ายที่สุด และสามารถนำกลับมาวิเคราะห์ออกมาเห็นภาพรวมการทำงาน และผลกระทบต่าง ๆ เพื่อใช้ในการสื่อสารกับทีม Business ได้ สร้างความเข้าใจตรงกันมากขึ้นโดยปราศจากกำแพงภาษา Technical ที่เข้าใจยาก

  • Strategic Domain Driven Design

การวางกลยุทธ์แบ่ง Domain ย่อยให้แต่ละทีม Developer สามารถแบ่งงานไปพัฒนาบนระบบซอฟต์แวร์ขนาดใหญ่ได้

  • Tactical Domain Driven Design

การวางระบบการพัฒนาซอฟต์แวร์อย่างไรให้ตอบโจทย์กับแผน Business model ขององค์กร ตามที่ได้รับจาก Requirement ได้

Organization Collaboration

Software Architecture

Organization Collaboration

การออกแบบโครงสร้างระบบซอฟต์แวร์ขนาดใหญ่ในองค์กรที่มีหลากหลายทีมแต่มีการทำงานที่แตกต่างกัน เป้าหมาย KPI ที่แตกต่างกัน ให้สามารถใช้อยู่ในระบบเดียวกันได้อย่างไม่เกิดความขัดแย้งกัน โดยมีคอนเซปในการออกแบบโครงสร้างดังนี้

Conway’s law

การออกแบบโครงสร้างระบบซอฟต์แวร์ให้ล้อกับโครงสร้างการทำงานขององค์กร ทำให้เห็นภาพการทำงานของระบบซอฟต์แวร์ได้ตรงกับความเป็นจริงมากขึ้น

Cross-Functional Team

การออกแบบโครงสร้างที่ไม่ยึดตามตำแหน่งเช่น Front End หรือ Back End แต่ออกแบบโดยยึดตามการทำงาน Function ของระบบ ทำให้แต่ละทีมสามารถช่วยกันรับผิดชอบ Features และ Business Goal ตั้งแต่ต้นจนจบ ลดเรื่องลำดับขั้นตอนการทำงาน แต่ยังคงร่วมกันทำงานในระบบเดียวกันเช่น Front End, Back End, Database, DevOps ช่วยกันรับผิดชอบส่วนงานนั้น ๆ โดยมีวิธีการแบ่งการทำงานร่วมกัน 2 วิธีได้แก่

  • Monolith

คือรูปแบบการทำงานของทีม Developer ที่ร่วมกันทำงานอยู่บน Codebase เดียวกัน แต่แบ่งงานตาม Namepaces, Libraries หรือ Folder structure เป็นต้น

  • Multi-services

คือรูปแบบที่ให้แต่ละทีมสามารถแบ่ง Codebase ของตัวเองและทำการ Deploy ระบบเป็นส่วน ๆ แยกกัน โดยมีการสื่อสารกันระหว่างกันผ่านระบบ Network

————————————————————————————

ทั้งหมดเป็นเพียงส่วนหนึ่งของเนื้อหาทั้งหมด คุณสามารถเรียนรู้เพิ่มเติมให้เข้าใจถึงแก่นแท้จุดประสงค์ของ Software Architecture Design แต่ละแบบ พร้อมเสริมแนวคิดและวิธีการนำไปประยุกต์ใช้ในองค์กรของคุณได้

Software Architecture

Software Architecture Design – คอร์สออนไลน์

คอร์สออนไลน์ Software Architecture Design จะพาคุณมาทำความรู้จักกับ Software Architecture Patterns ต่างๆ ที่นิยมใช้ในการออกแบบ Software ขนาดใหญ่ ให้คุณเข้าใจ Concept ของแต่ละรูปแบบ สามารถวิเคราะห์ข้อดี-ข้อเสีย ของแต่ละ Pattern เสริมแนวคิดให้ผู้เรียนเข้าใจหลักการใช้งาน และสามารถนำไปเลือกใช้ได้ตรงกับงานและโมเดลขององค์กรได้

สอนโดย คุณชาคริต ลิขิตขจร – Senior Consultant, ThoughtWorks

คอร์สนี้เหมาะกับใคร
🙋 Software Developer ที่ต้องการเข้าใจพื้นฐานการพัฒนาซอฟต์แวร์ขนาดใหญ่ที่ต้องทำงานร่วมกันเป็นทีม
🙋 Software Developer ที่ต้องการเริ่มต้นการทำงานเป็น Software Architect
🙋 Software Developer ขององค์กรขนาดใหญ่
🙋 Software Architect ที่ต้องการทำความเข้าใจกับ Patterns แต่ละรูปแบบอีกครั้ง

สมัครเรียนเลยเพื่อเตรียมพร้อมในสายงานนี้ https://to.skooldio.com/MsbFoSGIMrb

You may also like

Progressive Web App คืออะไร
Technology

Progressive Web Apps คืออะไร?

แค่เขียน Apps อย่างเดียวคงไม่พอ! เมื่อ Users เลือกดาวน์โหลด Apps เท่าที่จำเป็นเพื่อประหยัดพื้นที่ใช้งาน จากสถิติการใช้งานของ Users ที่ “ไม่ตัดสินใจติดตั้ง Apps” เพราะขั้นตอนที่ยุ่งยากและเลือกติดตั้งเฉพาะ Apps ...
Data

Apache Airflow คืออะไร แล้วทำไมองค์กรชั้นนำส่วนใหญ่ถึงเลือกใช้

Apache Airflow คือ 1 ใน Workflow Management ที่ได้รับความนิยม และองค์กรชั้นนำระดับโลกหลายๆ องค์กรเลือกใช้ โดยเฉพาะอย่างยิ่งในการสร้าง Data Pipelines เพื่อจัดการกับข้อมูลจำนวนมหาศาล ส่วนหนึ่งเพราะองค์กรต่าง ...

More in:Technology

8 เหตุผลทำไมควรเขียน Scala Technology

8 เหตุผลที่ Dev ควรลองเขียนภาษา Scala ตั้งแต่ตอนนี้

เราเคยเกริ่นถึงภาษา Scala ไปบ้างแล้วจากบทความ ภาษา Scala มีจุดเด่นอะไร? ทำไมกำลังมาแรงในสาย Developer และ Data Engineer แต่ในกลุ่มนักพัฒนาหลายคนยังสงสัยว่าภาษา Scala มีความเหมาะไปใช้ในงานแบบไหน? ทำไมถึงต้องหันมาศึกษา ...
ภาษา Scala คืออะไร Technology

ภาษา Scala มีจุดเด่นอะไร? ทำไมกำลังมาแรงในสาย Developer และ Data Engineer

Scala คือ ภาษา Programming ที่กำลังมาแรงและเริ่มมีความนิยมใช้กันขึ้นเรื่อย ๆ จุดเริ่มต้นภาษา Scala เรียกได้ว่าเป็นลูกอีกคนหนึ่งของภาษา Java เช่นเดียวกับภาษา Kotlin ที่พัฒนาต่อยอดมาเพื่อแก้ไขข้อบกพร่องบางอย่างของภาษา Java ในจุดประสงค์ที่แตกต่างกัน ...
Technology

พร้อมแล้วหรือยัง!? ที่จะร่วมเดินทางเข้าสู่มิติคู่ขนาน ผ่านนิทรรศการออนไลน์สุดพิเศษ “Exclusive CO’XI” 

ปฏิเสธไม่ได้เลยกับคำว่า “Multiverse” หรือพหุจักรวาล ต้องเคยผ่านหูผ่านตากันมาบ้าง และอาจ ทำให้ใครหลาย ๆ คนจินตนาการถึงความแปลกใหม่ในอีกจักรวาลที่ขนานกับจักรวาลที่เราอยู่ในปัจจุบัน ซึ่งความแปลกใหม่นั้นอาจจะหมายถึงคน, สิ่งของ และรวมไปถึงนวัตกรรมใหม่ ๆ ที่เราไม่เคยเจอหรือไม่เคยมีมาก่อน เช่นเดียวกันกับ “Exclusive ...

Comments are closed.