SuperAPI AI 工具集

cqrs

通用与其它

查看项目

更新于 10-15 20:31

技能介绍

该技能围绕 CQRS(命令与查询职责分离)展开,核心是命令与查询使用不同模型,而非必须拆成两个微服务,也不强制事件溯源。

用途:当读界面无法套用聚合、写入带重不变量、需要反规范化的读存储(搜索、看板)时适用;对称 CRUD 场景不适用,仅给每个处理器套 MediatR 而无两个模型属于形式主义。

主要能力:区分命令(改状态、聚合/写存储、关键写需显式幂等、不变量失败返回 4xx)与查询(回答问题、DTO/视图/读存储、无副作用、空结果返回 404);命令如 PlaceOrder 不返回整页,可返回 202 加 id 或最小状态;查询如 GetOrderDetails 直接读投影或读 SQL,不绕经聚合。

使用方式:同一数据库内用写表加视图/读表为轻量 CQRS,可本地事务;两个存储(如 Postgres 加 Elasticsearch)为最终一致,UI 需处理延迟,投影用 Outbox。写提交后用进程内投影器,或事件加消费者;投影需幂等(按 order_id 加版本 upsert),写入端带版本/事件避免旧投影覆盖新投影。不要一开始就用两个数据库,先测量查询。

事件溯源为可选:写模型即事件流,聚合重建等于 fold;仅当历史是需求(法律审计、时间旅行、事实为真)时使用,代价包括 upcasting、快照、强制投影与团队学习曲线。不要为 CQRS 而做事件溯源,CQRS 可独立存在。

相关:命令总线(MediatR 等)只是调度器,不等于 CQRS;命令与查询两侧都要鉴权;Clean 架构中写端口与读查询分开。反模式包括命令返回整页、查询调用三个服务并持久化、用户注册用事件溯源、第一天就拆 command-service 与 query-service、投影非幂等。完成标准:命令查询各有模型依据、读模型幂等更新、非历史需求不用事件溯源、两侧鉴权、两存储时 UI 感知延迟。资料未提供价格、平台与具体安装命令。