คำถามที่น่าสนใจจากการ share
เรื่องการพัฒนาระบบงานด้วย Java + Spring Boot
ว่าเราจะทำการตรวจสอบโครงสร้างของ project ได้หรือไม่ ?
ในแต่ละ package และ class ต่าง ๆ
มีโครงสร้างตามที่เราต้องการ หรือ กำหนดไว้หรือไม่ ?

คำตอบคือ สามารถตรวจสอบโครงสร้างด้วย ArchUnit นั่นเอง
โดยสามารถเขียน rule ต่าง ๆ ในรูปแบบของ test case ได้เลย
แต่ก็ยังมีข้อจำกัดในการทำงานด้วย เช่น

  • ตรวจสอบช่วงของ compile-time เท่านั้น
  • ถ้ามีอะไรทำงานตอน runtime จะไม่สามารถตรวจสอบได้ เช่น Lombox เป็นต้น

มาลองใช้งานกันดู

ขั้นตอนที่ 1 ทำการเพิ่ม dependency ArchUnit เข้ามาใน project

โดยจะทำงานร่วมกับ JUnit 5 + Apache Maven

ขั้นตอนที่ 2 ทำการกำหนดโครงสร้างของ project กัน

ยกตัวอย่างเช่น กำหนดให้เป็น layer-based structure แบ่งออกเป็น

  • Controller
  • Service
  • Repository

Flow ของการทำงานคือ Controller -> Service -> Repository เท่านั้น
กำหนดชื่อ package เช่น controller, service และ repository
กำหนด naming convention โดยให้ทุก ๆ class มีชื่อลงท้ายด้วย *Controller, *Service และ *Repository

ขั้นตอนที่ 3 ทำการเขียน test case ด้วย ArchUnit

หลังจากตกลงโครงสร้างเรียบร้อยแล้ว
ก็ทำการเขียน Rule เพื่อทดสอบด้วย ArchUnit ได้เลย ดังนี้

แน่นอนว่า ผลการทดสอบมัน failure แน่นอน
นั่นคือเหตุผลที่เราควรต้องสร้าง หรือ แก้ไขให้เป็นไปตามที่ต้องการ

สุดท้ายแล้ว เราสามารถควบคุมโครงสร้างของ project
ให้เป็นไปตามที่ต้องการ หรือตามที่ตกลงกันไว้
เหมาะกับการทำงานเป็นทีม
หรือแม้แต่เป็น guideline ให้ AI Agent for coding อีกด้วย
เพื่อไม่ให้ code ออกนอกลู่นอกทาง !!

ลองใช้งานดูครับ
ขอให้สนุกกับการ coding

Code ตัวอย่างอยู่ที่ GitHub:Up1

เพิ่มเติม library ของภาษาต่าง ๆ