【发布时间】:2018-11-29 23:09:24
【问题描述】:
我正在从事一个遵循 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 时,所有代码实际上是相同的。
唯一的例外是在 Created 查询中我的 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 个查询,这取决于从控制器调用的方式?
编辑:添加了更好的标签
【问题讨论】:
-
围绕这些方法的类是什么?
标签: c# domain-driven-design dbcontext cqrs mediatr