在电子书籍Domain Driven Design - Step by Step 书中谈到 Command
Query Separation(CQS)模式,命令和查询分离模式。
CQS其实是对类的方法行为范围进行了界定,方法或者可以是一个事件入口,是对某个外部命令事件的响应;或者也可以说是一个能够获得结果数据的查询,但不可以两者都是。
其实使用DBC模式对方法也能够进行约束,这个方法的前置条件 是什么?后置条件得到结果预期是什么,这些都以一种合约形式进行约定。
提出CQS是为了解决报表输出问题,报表Reporting常常直接从数据库获得比较自然,排序等,所以,通过CQS模式进行分类,Domain操作属于Command,是从Repository中获得;而Reporting属于查询Query操作,属于传统数据库风格形式。
带来问题是两种场景下数据的同步,个人以为通过缓存可以实现。积极面对不一致性,有时业务不一定要求那么及时,如果要求及时就手工同步。