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);
}
}