命令查询分离模式表明方法是命令还是查询应该是显而易见的(我有一个简单的原则,而不是带有事件源的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)额外的数据库调用。
答案 0 :(得分:0)
我认为 humanReadableId 应该是该方法插入的项的属性。所以它应该在create方法中设置,你不需要查询来获得它。