Я работаю над проектом по шаблону CQRS и Mediatr.
У меня есть объект, настроенный так
public class Order
{
public Guid OrderId { get; set; }
public Guid CreatedByUserId { get; set; }
public Guid? AcceptedByUserId { get; set; }
public string Registration { get; set; }
public string Description { get; set; }
public User CreatedByUser { get; set; }
public User AcceptedByUser { get; set; }
}
Когда я пишу свои 2 запроса, GetAllOrdersCreatedByUser & GetAllOrdersAcceptedByUser allкод практически одинаковый.
Единственное исключение - запрос Created, my where находится на CreatedByUserId, а запрос Accepted, где находится AcceptedByUserId
GetAllOrdersAcceptedByUser: -
public async Task<OrderAcceptedByUserListViewModel> Handle(GetAllOrdersAcceptedByUserQuery request, CancellationToken cancellationToken)
{
var model = new OrderAcceptedByUserListViewModel
{
Orders = await _context.Order
.Where(x => x.AcceptedByUserId == request.UserId)
.Select(OrderDto.Projection)
.OrderBy(o => o.Registration)
.ToListAsync(cancellationToken)
};
return model;
}
GetAllOrdersCreatedByUser: -
public async Task<OrderCreatedByUserListViewModel> Handle(GetAllOrdersCreatedByUserQuery request, CancellationToken cancellationToken)
{
var model = new OrderCreatedByUserListViewModel
{
Orders = await _context.Order
.Where(x => x.CreatedByUserId == request.UserId)
.Select(OrderDto.Projection)
.OrderBy(o => o.Registration)
.ToListAsync(cancellationToken)
};
return model;
}
Это правильная реализация или объективно лучше иметь 1 запрос, который может выполнять обе функции в зависимости от того, как еговызывается с контроллера?
Редактировать: Добавлены лучшие теги