MediatR เป็นไลบรารีใน .NET Core ที่ใช้เพื่อจัดการการส่งข้อความหรือคำสั่งระหว่างส่วนประกอบต่างๆ ของของตัวโปรแกรม ซึ่งช่วยให้โค้ดสามารถจัดการความซับซ้อนและโปรแกรมของเราแยกเป้นอิสระต่อกัน
หลักการทำงานของ MediatR จะอยู่บนพื้นฐานของ Mediator Design Pattern โดยทำหน้าที่เป็นตัวกลางในการประสานการทำงานระหว่างส่วนต่างๆ
โดยที่ตัวส่วนประกอบเหล่านั้นไม่จำเป็นต้องรู้จักกันโดยตรง ตัวอย่างเช่น แทนที่ Controller จะต้องติดต่อกับ Service โดยตรง ก็สามารถส่ง Request ผ่าน MediatR ไปยังตัว Handler ที่เกี่ยวข้องกับคำสั่งนั้น ๆ ได้
โดยหลักๆ MediatR เป็นไลบรารีที่ช่วยให้การใช้รูปแบบ Mediator ในแอปพลิเคชัน .NET Core ง่ายขึ้น โดยมีประโยชน์และเหตุผลในการใช้งานดังนี้:
- ง่ายต่อการใช้งาน: MediatR ช่วยให้เราจัดการคำขอ (commands และ queries) และตัวจัดการ (handlers) ได้ง่ายขึ้น ทำให้โค้ดของเราเป็นระเบียบและอ่านง่าย
- โค้ดแยกเป็นอิสระจากกัน: ส่วนประกอบต่าง ๆ ของแอปพลิเคชันจะสื่อสารผ่านตัวกลาง (mediator) ทำให้โค้ดของเรายืดหยุ่นและง่ายต่อการบำรุงรักษา
- จัดการคำขอ-การตอบสนองได้ง่าย: MediatR ทำให้การจัดการคำขอและการตอบสนองง่ายขึ้น คุณกำหนดคำขอและตัวจัดการที่เกี่ยวข้อง ซึ่งจะประมวลผลคำขอนั้นให้
- ปรับแต่ง Behavior ได้: หลักการคล้ายๆ กับ Middleware ที่เราสามารถเพิ่ม logic ใน pipeline ของ MediatR เพื่อปรับดักจับ request/response
- ง่ายต่อการทดสอบ: การทดสอบทำได้ง่ายขึ้น เพราะการแยกคำสั่งและการจัดการทำให้สามารถทดสอบแต่ละส่วนประกอบแยกจากกันได้
- โค้ดที่สอดคล้องกัน: การใช้ MediatR ทำให้โค้ดของคุณเป็นระเบียบและอ่านง่ายขึ้น
- รองรับ Dependency Injection
- Request/Response (Command/Query): ส่งคำสั่งหรือการเรียกข้อมูล (เช่น คำสั่ง Command หรือการ Query ข้อมูล) และให้มีการตอบกลับผลลัพธ์
ตัวอย่าง: เราสามารถส่ง Command เพื่อเพิ่มข้อมูลใหม่หรือแก้ไขข้อมูล และให้มี Handler มาจัดการคำสั่งเหล่านั้น
- Notification: ใช้สำหรับส่งข้อความแจ้งเตือนไปยัง Handler หลายตัวที่สมัครรับการแจ้งเตือนโดยไม่จำเป็นต้องรอผลลัพธ์กลับ
ตัวอย่าง: เมื่อมีเหตุการณ์บางอย่างเกิดขึ้น เช่น การสร้างผู้ใช้ใหม่ อาจมีหลาย Handler ที่ต้องการทราบและทำการประมวลผลต่อจากเหตุการณ์นั้นๆ เช่น ส่งอีเมลยืนยัน เป็นต้น
- Streaming: ใช้สำหรับการส่งข้อมูลแบบ Streaming ไปยัง Handler โดยไม่จำเป็นต้องรอจนกว่าข้อมูลจะถูกส่งครบทั้งหมด
- Behaviors: ใช้สำหรับการปรับแต่งการทำงานของ MediatR โดยเราสามารถสร้าง Behavior ที่จะทำงานก่อนหรือหลังจากการส่งคำสั่งไปยัง Handler ได้
- ใช้ MediatR ในการรับส่ง request/response ของตัว API “Dotnet API Command and Query pattern”
- ใช้ MediatR ในการทำ caching response ของตัว API “มาใช้ MediatR ทำ Response Caching”
- ใช้ MediatR ในการ log request/response ของตัว API “มาใช้ MediatR ทำ Logging”
- ใช้ MediatR ในการทำ Validation Handling “มาใช้ MediatR ทำ Validation handling”
- ใช้ MediatR ในการ control database transaction
ตัวอย่างโค้ดในบทความนี้สามารถดูได้ใน