Avalist

มาทำความรู้จัก MediatR ใน .NET Core

MediatR เป็นไลบรารีใน .NET Core ที่ใช้เพื่อจัดการการส่งข้อความหรือคำสั่งระหว่างระหว่าง component หลักการทำงานของ MediatR จะอยู่บนพื้นฐานของ Mediator Design Pattern โดยการประสานการทำงานระหว่างส่วนต่างๆ
มาทำความรู้จัก MediatR ใน .NET Core

MediatR เป็นไลบรารีใน .NET Core ที่ใช้เพื่อจัดการการส่งข้อความหรือคำสั่งระหว่างส่วนประกอบต่างๆ ของของตัวโปรแกรม ซึ่งช่วยให้โค้ดสามารถจัดการความซับซ้อนและโปรแกรมของเราแยกเป้นอิสระต่อกัน

หลักการทำงานของ MediatR จะอยู่บนพื้นฐานของ Mediator Design Pattern โดยทำหน้าที่เป็นตัวกลางในการประสานการทำงานระหว่างส่วนต่างๆ โดยที่ตัวส่วนประกอบเหล่านั้นไม่จำเป็นต้องรู้จักกันโดยตรง ตัวอย่างเช่น แทนที่ Controller จะต้องติดต่อกับ Service โดยตรง ก็สามารถส่ง Request ผ่าน MediatR ไปยังตัว Handler ที่เกี่ยวข้องกับคำสั่งนั้น ๆ ได้ โดยหลักๆ MediatR เป็นไลบรารีที่ช่วยให้การใช้รูปแบบ Mediator ในแอปพลิเคชัน .NET Core ง่ายขึ้น โดยมีประโยชน์และเหตุผลในการใช้งานดังนี้:

  1. ง่ายต่อการใช้งาน: MediatR ช่วยให้เราจัดการคำขอ (commands และ queries) และตัวจัดการ (handlers) ได้ง่ายขึ้น ทำให้โค้ดของเราเป็นระเบียบและอ่านง่าย
  2. โค้ดแยกเป็นอิสระจากกัน: ส่วนประกอบต่าง ๆ ของแอปพลิเคชันจะสื่อสารผ่านตัวกลาง (mediator) ทำให้โค้ดของเรายืดหยุ่นและง่ายต่อการบำรุงรักษา
  3. จัดการคำขอ-การตอบสนองได้ง่าย: MediatR ทำให้การจัดการคำขอและการตอบสนองง่ายขึ้น คุณกำหนดคำขอและตัวจัดการที่เกี่ยวข้อง ซึ่งจะประมวลผลคำขอนั้นให้
  4. ปรับแต่ง Behavior ได้: หลักการคล้ายๆ กับ Middleware ที่เราสามารถเพิ่ม logic ใน pipeline ของ MediatR เพื่อปรับดักจับ request/response
  5. ง่ายต่อการทดสอบ: การทดสอบทำได้ง่ายขึ้น เพราะการแยกคำสั่งและการจัดการทำให้สามารถทดสอบแต่ละส่วนประกอบแยกจากกันได้
  6. โค้ดที่สอดคล้องกัน: การใช้ MediatR ทำให้โค้ดของคุณเป็นระเบียบและอ่านง่ายขึ้น
  7. รองรับ Dependency Injection

การใช้งานหลักของ MediatR ใน .NET Core

  1. Request/Response (Command/Query): ส่งคำสั่งหรือการเรียกข้อมูล (เช่น คำสั่ง Command หรือการ Query ข้อมูล) และให้มีการตอบกลับผลลัพธ์ ตัวอย่าง: เราสามารถส่ง Command เพื่อเพิ่มข้อมูลใหม่หรือแก้ไขข้อมูล และให้มี Handler มาจัดการคำสั่งเหล่านั้น
  2. Notification: ใช้สำหรับส่งข้อความแจ้งเตือนไปยัง Handler หลายตัวที่สมัครรับการแจ้งเตือนโดยไม่จำเป็นต้องรอผลลัพธ์กลับ ตัวอย่าง: เมื่อมีเหตุการณ์บางอย่างเกิดขึ้น เช่น การสร้างผู้ใช้ใหม่ อาจมีหลาย Handler ที่ต้องการทราบและทำการประมวลผลต่อจากเหตุการณ์นั้นๆ เช่น ส่งอีเมลยืนยัน เป็นต้น
  3. Streaming: ใช้สำหรับการส่งข้อมูลแบบ Streaming ไปยัง Handler โดยไม่จำเป็นต้องรอจนกว่าข้อมูลจะถูกส่งครบทั้งหมด
  4. Behaviors: ใช้สำหรับการปรับแต่งการทำงานของ MediatR โดยเราสามารถสร้าง Behavior ที่จะทำงานก่อนหรือหลังจากการส่งคำสั่งไปยัง Handler ได้

Dotnet MediatR with Pipeline behavior

มาดูตัวอย่างของการนำ MediatR มาใช้งานกัน ในบทความจะเป็นตัวอย่างการใช้ MediatR มาปรับใช้กับการพัฒนาระบบจริงๆ

  1. ใช้ MediatR ในการรับส่ง request/response ของตัว API “Dotnet API Command and Query pattern”
  2. ใช้ MediatR ในการทำ caching response ของตัว API “มาใช้ MediatR ทำ Response Caching”
  3. ใช้ MediatR ในการ log request/response ของตัว API “มาใช้ MediatR ทำ Logging”
  4. ใช้ MediatR ในการทำ Validation Handling “มาใช้ MediatR ทำ Validation handling”
  5. ใช้ MediatR ในการ control database transaction

ตัวอย่างโค้ดในบทความนี้สามารถดูได้ใน

Go to Avalist’s GitHub repo
ตัวอย่างโปรแกรม

อ่านบทความเพิ่มเติม

ใช้ MediatR ทำ Response Caching Caching น่าจะเป็นสิ่งที่จำเป็นหลักของการออกแบบโปรแกรมสมัยใหม่ เพื่อรองรับกับการจำนวน request ที่เพิ่มขึ้นอย่างรวดเร็ว ในบทความนี้เราจะมาลองทำ caching โดยใช้ MediatR กัน
4 min read
ใช้ MediatR ใน .NET Core ทำ Logging MediatR เป็นไลบรารีใน .NET Core ที่ใช้เพื่อจัดการการส่งข้อความหรือคำสั่งระหว่างระหว่าง component หลักการทำงานของ MediatR จะอยู่บนพื้นฐานของ Mediator Design Pattern โดยการประสานการทำงานระหว่างส่วนต่างๆ
1 min read