สถาปัตยกรรมแบบแบ่งชั้น (Layered Architecture)

1. สถาปัตยกรรมแบบแบ่งชั้น (Layered Architecture)

นี่คือแนวคิดหลักที่ครอบคลุมทั้งหมด โดยเป็นการจัดระเบียบโค้ดออกเป็นชั้น (Layer) ต่างๆ ที่มีหน้าที่รับผิดชอบชัดเจน ซึ่งในตัวอย่างของเราแบ่งได้ดังนี้:

  • Presentation Layer (ชั้นการนำเสนอ):
    • หน้าที่: จัดการ User Interface (UI) และการโต้ตอบกับผู้ใช้ทั้งหมด
    • ในตัวอย่างนี้คือ: Livewire Component (ProductManager.php) และ Blade View (product-manager.blade.php) ทำหน้าที่แสดงผลข้อมูล, รับ Input, และจัดการสถานะของ Modal
  • Business Logic Layer (ชั้นตรรกะทางธุรกิจ):
    • หน้าที่: เป็นหัวใจของแอปพลิเคชัน จัดการกฎเกณฑ์ทางธุรกิจ, การคำนวณ, การตัดสินใจ และประสานงานระหว่าง Layer ต่างๆ
    • ในตัวอย่างนี้คือ: ProductService.php ทำหน้าที่จัดการ Business Logic เช่น การตรวจสอบเงื่อนไขก่อนบันทึก, การจัดการ Transaction, หรือในอนาคตอาจจะมีการส่งอีเมล, อัปโหลดไฟล์ เป็นต้น
  • Data Access Layer (ชั้นการเข้าถึงข้อมูล):
    • หน้าที่: รับผิดชอบการติดต่อกับฐานข้อมูลเพียงอย่างเดียว (สร้าง, อ่าน, อัปเดต, ลบข้อมูล)
    • ในตัวอย่างนี้คือ: ProductRepository.php ทำหน้าที่เป็นสะพานเชื่อมระหว่าง Business Logic กับ Database (Eloquent Model)

2. Service-Repository Pattern

เป็นรูปแบบการออกแบบ (Design Pattern) ที่นิยมใช้ในการสร้าง Layered Architecture ใน Laravel:

  • Repository Pattern: คือการสร้างคลาส (Repository) ที่ทำหน้าที่ “ห่อหุ้ม” การ query ฐานข้อมูลไว้ทั้งหมด ทำให้ Service หรือ Controller ไม่ต้องยุ่งกับ Eloquent โดยตรง ข้อดีคือถ้าในอนาคตเราอยากเปลี่ยนจากการเก็บข้อมูลใน MySQL ไปเป็นอย่างอื่น (เช่น API, NoSQL) เราก็จะแก้ไขแค่ใน Repository ที่เดียว
  • Service Layer: คือคลาส (Service) ที่เรียกใช้ Repository เพื่อนำข้อมูลมาประมวลผลตาม Logic ของธุรกิจ การมี Service Layer ช่วยให้ Controller/Livewire Component ของเรา “ผอม” (Thin Controller) คือมีโค้ดน้อยลง ทำหน้าที่แค่รับส่งข้อมูลเท่านั้น ทำให้โค้ดสะอาดและทดสอบง่ายขึ้น

3. เป็นแนวทางสู่ Clean Architecture / Domain-Driven Design (DDD)

สถาปัตยกรรมแบบนี้ถือเป็นก้าวแรกที่สำคัญและเป็นรูปธรรมในการนำหลักการของ Clean Architecture และ Domain-Driven Design (DDD) มาใช้

  • Clean Architecture: เน้นการแยกส่วนโค้ดออกจากกันอย่างเด็ดขาด โดยให้ Business Logic ที่เป็นหัวใจหลักอยู่ตรงกลาง และไม่ขึ้นกับส่วนอื่นๆ เช่น UI, Database, หรือ Framework
  • Domain-Driven Design: เน้นการออกแบบซอฟต์แวร์โดยยึด “โดเมน” หรือ “โลกของธุรกิจ” เป็นศูนย์กลาง ซึ่ง Service Layer ก็คือที่ที่เราจะใส่ “Domain Logic” เหล่านี้นั่นเอง

สรุป

ถ้าจะให้เรียกสั้นๆ และเข้าใจง่ายในวงการนักพัฒนา Laravel:

“นี่คือการเขียนโปรแกรมโดยใช้ Service-Repository Pattern ซึ่งเป็นรูปแบบหนึ่งของ Layered Architecture เพื่อให้ได้โครงสร้างแบบ Clean Architecture”

การใช้สถาปัตยกรรมนี้จะทำให้โปรเจกต์ของคุณ:

  • ดูแลรักษาง่าย (Maintainable): แก้ไขส่วนไหนไม่กระทบส่วนอื่น
  • ทดสอบง่าย (Testable): สามารถทดสอบ Logic ใน Service แยกจาก Database ได้
  • ขยายระบบง่าย (Scalable): เพิ่มฟังก์ชันใหม่ๆ ได้อย่างเป็นระบบ
  • นำกลับมาใช้ใหม่ได้ (Reusable): สามารถนำ Service หรือ Repository ไปใช้ใน Controller อื่นๆ หรือใน Artisan Command ก็ได้
Scroll to Top