如何限制CQRS中查询类的数量

本文关键字:查询 何限制 CQRS | 更新日期: 2023-09-27 17:53:29

我正在实现CQRS,我对查询的数量有多快感到有点困惑。我也在谷歌上搜索过,但由于各种各样的CQRS,我没有得到任何合适的解决方案。也许我做错了什么?以下是我的代码和相应的查询。

class User {
   public int Id { get; set; }   
   public string Username { get; set; }
   public string Status { get; set; }
   public string Role { get; set; }
   // ...
}

我想通过用户名找到用户,所以我为它写了query

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或通过多个字段(通过两个状态&角色)。还可以有更多这样的查询

我的问题是我需要为他们创建单独的查询类吗?这不会使查询的数量相当高吗?我怎么限制它呢?

如何限制CQRS中查询类的数量

我发现最好的方法是务实-使查询适合当前情况的上下文,而不要考虑超出此范围。

您说它们可以同时按状态和角色进行查询,因此在查询对象中包含这两个属性。

如果您在域中的"其他地方"重用查询,并且它需要进一步的搜索条件,则针对该域问题创建一个新的查询。

把自己从"限制代码"的负担中解放出来,分别处理每种情况。创建处理多个领域场景的对象会导致复杂性、回归问题和脆弱的类。

给你的类型一个单一的职责