Skip to main content

สรุป

การทำสิ่งเหล่านี้อำนวยความสะดวกอะไรบ้าง

ภาษา GO นั้นเนื่องจากอิสระของภาษาที่สามารถวางแบบไหนได้ การเขียน code โดยไม่มี pattern จะส่งผลทำให้ "debug" ได้ยากขึ้นเช่นเดียวกัน

การใช้ Architecture เหล่านี้จะช่วยทำสิ่งที่เรียกว่า " Separation of Concerns" คือแยกจุดประสงค์ของ Module แต่ละส่วนออกจากกัน

  • Hexagonal Architecture เป็นการแยกส่วนระหว่าง core logic จาก external system อย่าง Ports, Adapter
  • Clean Architecture เป็นการแยกส่วนระหว่าง layer แต่ละส่วนให้มีหน้าที่แต่ละอย่างออกจากกันชัดเจน

รวมถึงสิ่งเหล่านี้จะส่งผลทำให้การเขียน Test สามารถทำได้ง่ายด้วย เนื่องจาก Module มีการแยกส่วนออกจากกัน เวลา Test ก็จะเป็นการ Test ในแต่ละมุมมองออกจากกันได้ (เดี๋ยวเราจะเพิ่มเติมอีกทีในหัวข้อ Unit Test กัน)

แล้วเราควรพิจารณาใช้อะไรดี

สำหรับ Architecture ไม่มีสิ่่งที่เรียกว่า "Best practice" ขึ้นอยู่กับมุมมองว่าตัวไหนง่ายกว่ากัน

  • จริงๆแล้วยังมีมากกว่า 2 ตัวนี้ แต่แนะนำว่า ถ้าใครเพิ่งเริ่มต้นใช้งานศึกษาจาก 2 ตัวนี้แล้วเทียบวิธีการอ่าน code กัน อันไหนรู้สึกเข้ากับ project เรามากกว่า หรือ สามารถอ่านตามได้ง่ายกว่า เข้าใจได้ง่ายกว่า = ตัวนั้นแหละคือตัวที่ใช่
  • จากประสบการณ์ส่วนตัว
    • ขึ้นอยู่กับว่าชอบไอเดียการวาง code แบบไหนมากกว่า (อันไหนคิดงานได้ง่ายกว่า ก็เลือกอันนั้น)
    • และขึ้นอยู่กับว่าทีมชอบ หรือ เห็นร่วมกันกับตัวไหนมากกว่า ก็สามารถพิจารณาใช้ตรงกันได้ (ขอแค่ทุกคนต้องสามารถ follow ตาม Pattern ของ Architecture ได้)

ที่สำคัญคือ "Architecture ไม่มีมุมมองว่าอันไหนถูกหรือผิด" ขอแค่ Practice นี้ เราหรือทีมสามารถปฎิบัติตามได้ ส่งผลทำให้ code เหมือนกัน อ่านไปในทิศทางเดียวกันได้ = บรรลุจุดประสงค์ของการใช้งานเป็นที่เรียบร้อย