1️⃣ ICommandHandler คืออะไร?

By suparat · 08 Oct 2025


โอเค 😎 เรามา สอนเรื่อง ICommandHandler ใน C# / .NET กันแบบเข้าใจง่ายและลงมือทำได้เลย


1️⃣ ICommandHandler คืออะไร?

ICommandHandler เป็น Pattern ที่ใช้กับ CQRS (Command Query Responsibility Segregation)

  • ใช้สำหรับ จัดการคำสั่ง (Command) เช่น Create, Update, Delete

  • แยกความรับผิดชอบออกจาก Query ที่ใช้แค่ดึงข้อมูล

  • จะทำงานร่วมกับ Command objects ซึ่งเป็น DTO ที่บอกว่า "ฉันต้องการทำอะไร"

โครงสร้างทั่วไป:

public interface ICommandHandler<TCommand>
{
    Task Handle(TCommand command);
}
  • TCommand คือ object ของคำสั่ง เช่น CreateUserCommand

  • Handle คือ method ที่ทำงานกับคำสั่งนั้น


2️⃣ ตัวอย่าง ICommand และ ICommandHandler

Step 1: สร้าง Command

public class CreateUserCommand
{
    public string Name { get; set; }
    public int Age { get; set; }
}

Step 2: สร้าง Handler

public class CreateUserCommandHandler : ICommandHandler<CreateUserCommand>
{
    public async Task Handle(CreateUserCommand command)
    {
        // ตัวอย่าง: บันทึกลง database (จำลองด้วย Console)
        Console.WriteLine($"Creating user: {command.Name}, Age: {command.Age}");
        
        // สมมติว่าเป็น async operation
        await Task.CompletedTask;
    }
}

3️⃣ การเรียกใช้งาน

var command = new CreateUserCommand { Name = "Jen", Age = 25 };
var handler = new CreateUserCommandHandler();

await handler.Handle(command);
// Output: Creating user: Jen, Age: 25

4️⃣ ขยาย: Generic CommandHandler (Optional)

เราสามารถทำให้ Command Handler แบบ Generic รองรับการคืนค่าได้ เช่น

public interface ICommandHandler<TCommand, TResult>
{
    Task<TResult> Handle(TCommand command);
}

public class AddNumbersCommand
{
    public int A { get; set; }
    public int B { get; set; }
}

public class AddNumbersHandler : ICommandHandler<AddNumbersCommand, int>
{
    public Task<int> Handle(AddNumbersCommand command)
    {
        int result = command.A + command.B;
        return Task.FromResult(result);
    }
}

// ใช้งาน
var command = new AddNumbersCommand { A = 5, B = 3 };
var handler = new AddNumbersHandler();
int sum = await handler.Handle(command);
Console.WriteLine(sum); // 8

✅ สรุป

  • ICommandHandler<T> → จัดการ คำสั่ง (Command)

  • Handle → Method สำหรับประมวลผลคำสั่ง

  • แยกชัดเจนจาก Query (ดึงข้อมูล)

  • สามารถทำเป็น Generic เพื่อคืนค่าหรือ async


ถ้าคุณอยาก ฉันสามารถทำ Diagram + Flow การทำงานของ ICommandHandler กับ Command ใน CQRS ให้ดูง่าย ๆ เหมือน Flowchart ให้เข้าใจเร็ว ๆ ได้ด้วย

คุณอยากให้ทำไหม?

1️⃣ ICommandHandler คืออะไร?
Web hosting by Somee.com