CQS模式与输出变量

时间:2018-05-18 14:00:29

标签: c# design-patterns command-query-separation

命令查询分离模式表明方法是命令还是查询应该是显而易见的(我有一个简单的原则,而不是带有事件源的CQRS等)。

因此,命令必须为void,而查询必须返回值。

public interface IRepository<T>
{
    void Create(Guid id, T item);
    int GetHumanReadableId(Guid id);
    // other members
}

这在Mark Seemann的帖子中有所讨论: http://blog.ploeh.dk/2014/08/11/cqs-versus-server-generated-ids/

我想知道输出变量接近何处?它违反了CQS吗?

我的想法是:

public interface IRepository<T>
{
    void Create(T item, out int humanReadableId);    
    // other members
}

这似乎保持方法无效,从而指示一个命令,同时仍然允许从中获取一些输出而没有单独的显式查询 - 毕竟,像int GetHumanReadableId(Guid id);这样的附加显式查询意味着  1)更多代码编写和维护,2)额外的数据库调用。

1 个答案:

答案 0 :(得分:0)

我认为 humanReadableId 应该是该方法插入的的属性。所以它应该在create方法中设置,你不需要查询来获得它。