สรุป
การทำสิ่งเหล่านี้อำนวยความสะดวกอะไรบ้าง
ภาษา 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 เหมือนกัน อ่านไปในทิศทางเดียวกันได้ = บรรลุจุดประสงค์ของการใช้งานเป็นที่เรียบร้อย