Типы сообщений в CQRS: команды и запросы, объясненные примерами кода

В шаблоне CQRS (разделение ответственности за запросы команд) обычно используются два типа сообщений: команды и запросы. Позвольте мне объяснить каждый тип и привести примеры кода для лучшего понимания.

  1. Команды.
    Команды представляют собой действия или намерения изменить состояние системы. Они отправляются на командную сторону приложения и отвечают за изменение данных. Команды обычно отправляются асинхронно и не ожидают возврата значения.

Пример кода на C#:

public class CreateUserCommand
{
    public string Username { get; set; }
    public string Email { get; set; }
// Additional properties for the command
}
public class CreateUserService
{
    public void Handle(CreateUserCommand command)
    {
        // Logic to create a new user
        // Modify the system's state accordingly
    }
}
  1. Запросы.
    Запросы используются для получения данных из системы. Они отправляются на сторону запроса, которая отвечает за чтение данных и возврат результата. Запросы обычно являются синхронными и возвращают данные без изменения состояния системы.

Пример кода на C#:

public class GetUserQuery
{
    public int UserId { get; set; }
// Additional properties for the query
}
public class GetUserQueryHandler
{
    public UserDto Handle(GetUserQuery query)
    {
        // Logic to retrieve user data from the system
        // Return the result as a data transfer object (DTO)
    }
}
public class UserDto
{
    public int UserId { get; set; }
    public string Username { get; set; }
    public string Email { get; set; }
// Additional properties for the DTO
}