我正在实施CQRS,我对查询的查询速度有多困惑。 我也搜索了它,但由于CQRS的各种风味,我没有得到任何适当的解决方案。也许我在这里做错了什么?这是我的代码和各自的查询。
class User {
public int Id { get; set; }
public string Username { get; set; }
public string Status { get; set; }
public string Role { get; set; }
// ...
}
我想通过用户名找到用户,所以我已经为它编写了查询
abstract class Query<TResult> { }
class FindUserByStatusQuery : Query<IEnumerable<User>> {
public string Status;
}
及其相应的处理程序
interface IQueryHandler<TQuery, TResult> where TQuery : Query<TResult>
{
TResult Handle(TQuery query);
}
class FindUserByStatusQueryHandler : IQueryHandler<FindUserByStatusQuery, IEnumerable<User>>
{
public IEnumerable<User> Handle(FindUsersByAcountStatusQuery query)
{
using (Entities db = new Entities())
{
status = query.status.ConvertToString();
return db.Users.Where(u => u.Status.Contains(status)).ToArray();
}
}
}
现在,我想通过其他字段来查找用户,或者通过ID或多个字段(通过状态和角色)查找用户。可能会有更多类似的查询。
我的问题是我需要为它们创建单独的查询类吗?不会使查询数量相当高吗?我怎么能限制它?
答案 0 :(得分:7)
我发现最好的方法是务实 - 让查询适合当前情况的背景,除此之外不要考虑。
您说他们可以同时按状态和角色进行查询,因此请在查询对象中包含这两个属性。
如果您在其他地方重复使用查询&#39;在域中,它需要进一步的搜索条件,专门为该域问题创建一个新查询。
摆脱“限制代码”的负担。并分别处理每种情况。创建处理多个域方案的对象会导致复杂性,回归问题和脆弱的类。
提供您的类型a single responsibility