structure
จากบทความเรื่อง Package by feature, not layer
อธิบายถึงการแบ่ง package ต่าง ๆ ในระบบงาน
ซึ่งเป็นสิ่งที่สำคัญมาก ๆ
เป็นงานที่ทีมพัฒนาต้องช่วยกัน
เป็นงานที่ทีมพัฒนาต้องตัดสินใจร่วมกัน
ว่าต้องการให้โครงสร้างของระบบเป็นอย่างไร ?
แน่นอนว่า ส่งผลต่อการพัฒนาระบบอย่างแน่นอน

โครงสร้างของระบบงานก็มักสะท้อนหลาย ๆ อย่าง
เช่นโครงสร้างของระบบ
เช่นโครงสร้างของทีม
เช่นโครงสร้างขององค์กร

ตัวอย่างเช่น ระบบอาจจะแบ่งเป็น layer หรือหน้าที่ของการทำงาน

ซึ่งประกอบไปด้วย

  • Controller
  • View
  • Model
  • DAO
  • Service
  • Interactor

แต่เมื่อระบบมีขนาดใหญ่ขึ้น มีจำนวน feature มากขึ้น
มักเกิดปัญหา

  • การดูแลลำบากขึ้น เนื่องจากในแต่ละ layer มีไฟล์จำนวนมาก
  • การอ่าน code ลำบากขึ้น เพราะว่าต้องกระโดดไปกระโดดมาใน layer ต่าง ๆ
  • เรื่องของ modular ไม่ต้องพูดถึง ดังนั้นเรื่องของการ reuse ก็ไม่ต้องคิดถึงเลย ทำได้ยากมาก ๆ
  • แก้ไฟล์หนึ่งกระทบอีกหลาย ๆ ส่วน

ดังนั้นจึงมีอีกแนวคิดคือ การแยกตาม feature

โดยในแต่ละ feature จะประกอบไปด้วยทุกสิ่งอย่างที่จำเป็นทั้ง

  • Controller
  • View
  • Model
  • DAO
  • Service
  • Interactor
  • Storyboard

ส่วน module หรือส่วนการทำงานอะไรที่ต้องใช้ร่วมกัน
ก็ให้ทำการแยกออกมาตัวอย่างเช่น Database และ Network
รวมไปถึง Utility ที่ใช้งานร่วมกันเช่น การจัดการไฟล์ การจัดการรูปภาพ เป็นต้น

ด้วยวิธีการนี้น่าจะทำให้การพัฒนาระบบดูดีขึ้น
ดูแลง่ายขึ้น
ลดผลกระทบต่าง ๆ จากการแก้ไข
ง่ายต่อการ scale
ง่ายต่อการย้าย feature ออกไปจากระบบ
ง่ายต่อการอ่าน code

สุดท้าย
คำถามคือ Developer ทำการแบ่ง package ของระบบกันอย่างไร ?