如何限制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或通过多个字段(通过两个状态&角色)。还可以有更多这样的查询
我的问题是我需要为他们创建单独的查询类吗?这不会使查询的数量相当高吗?我怎么限制它呢?
我发现最好的方法是务实-使查询适合当前情况的上下文,而不要考虑超出此范围。
您说它们可以同时按状态和角色进行查询,因此在查询对象中包含这两个属性。
如果您在域中的"其他地方"重用查询,并且它需要进一步的搜索条件,则针对该域问题创建一个新的查询。
把自己从"限制代码"的负担中解放出来,分别处理每种情况。创建处理多个领域场景的对象会导致复杂性、回归问题和脆弱的类。
给你的类型一个单一的职责