CQRS stands for Command Query Responsibility Segregation. In the CQRS pattern, commands and queries are implemented separately: commands handle write operations while queries handle read operations. This better fulfills the single responsibility principle and also enables better performance optimization.

https://learn.microsoft.com/zh-cn/azure/architecture/patterns/cqrs

https://www.xcode.me/Training/UnitNote/576

Defining the Order Query Interface

public interface IOrderQueries
{
    Task<OrderDetails> GetOrderAsync(int id);
}

Implementing the Order Query Interface

public class OrderQueries : IOrderQueries
{
    private readonly OrderingContext _context;

    public OrderQueries(OrderingContext context)
    {
        _context = context;
        dbContext.Database.SetConnectionString("db2_connection_string");
    }

    public async Task<OrderDetails> GetOrderAsync(int id)
    {
      // do something
    }
}

Registering the Order Query Interface

services.AddScoped<IOrderQueries, OrderQueries>();

Using the Order Query Interface

public class OrderController : ControllerBase
{
    private readonly IOrderQueries _orderQueries;

    public OrderController(IOrderQueries orderQueries)
    {
        _orderQueries = orderQueries;
    }

    [HttpGet("{id}")]
    public async Task<IActionResult> GetOrderAsync(int id)
    {
        var order = await _orderQueries.GetOrderAsync(id);
        return Ok(order);
    }
}