Token导航 LogoToken导航

Agent Skill · 研究检索

cqrs-aggregate-modeling(CQRS 聚合建模)

cqrs-aggregate-modeling 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

cqrs-aggregate-modeling 是研究检索类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为权限未标注;许可证信息还不明确,第三方扫描已通过,按安装量在研究检索类的 73,675 个 Skill 里排第 55,495。

总安装 475周安装 20GitHub Stars 75下载 166核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:cqrs-aggregate-modeling(CQRS 聚合建模)
来源仓库:https://github.com/j5ik2o/okite-ai
仓库路径:skills/cqrs-aggregate-modeling
安装命令:
npx skills add https://github.com/j5ik2o/okite-ai --skill cqrs-aggregate-modeling
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/j5ik2o/okite-ai --skill cqrs-aggregate-modeling

这个 Skill 是做什么的

研究检索类 Skill 主要解决「找资料、核对事实、把来源整理清楚」的问题,通常会让助手先检索再总结。

cqrs-aggregate-modeling 分析 CQRS 引入后聚合建模的变化,强调最小状态保持与读模型委托。适用于解决传统聚合肥大化问题,指导读写模型间的数据边界划分。提供线程聚合等典型案例,展示更新时全量加载与增量优化的性能差异。内容以日文编写,需人工复核术语翻译与架构建议的准确性。

适用宿主包括 Codex、Claude、Cursor、Gemini CLI,接入前应确认版本、权限和运行环境要求。

来源仓库内路径:skills/cqrs-aggregate-modeling

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/j5ik2o/okite-ai --skill cqrs-aggregate-modelin…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    权限没有明确标注,第一次使用时只给一个无关紧要的任务,观察它到底读了哪些文件和网络。

常见问题

6 条

cqrs-aggregate-modeling 怎么安装?

在终端执行 npx skills add https://github.com/j5ik2o/okite-ai --skill cqrs-aggregate-modeling。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

cqrs-aggregate-modeling 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

cqrs-aggregate-modeling 需要什么权限?

权限级别没有明确标注。第一次使用时建议只给无关紧要的任务,观察它实际读写了哪些内容。

cqrs-aggregate-modeling 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

cqrs-aggregate-modeling 用的人多吗?

公开数据是累计安装 475 次,近一周安装 20 次,下载 166 次,GitHub 75 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

cqrs-aggregate-modeling 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。
  • 第三方扫描已通过,常见的高风险行为没有命中。

先想清楚的地方

  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理研究检索类任务、又不想每次都手写提示词的人。

不太适合

  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

研究检索类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
find-skills

寻找技能 · Codex、Claude

31,199,81316,486操作浏览器MIT有提醒
self-improving-agent

自我改进 Agent · OpenClaw

16,464,0023,396接触敏感数据MIT-0通过
soultrace

灵魂追踪 · Codex、Claude

7,588,94412需要联网未明确有提醒
self-improving

自我完善 · OpenClaw

6,829,2841,046需要联网MIT-0通过
microsoft-foundry

微软代工厂 · Codex、Claude

6,614,144764调用外部服务未明确有提醒
cqrs-aggregate-modeling

CQRS 聚合建模 · 本页

47575权限未标注未明确通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

CQRSによる集約の境界再定義

CQRSを導入すると集約のモデリングが変わる。集約はコマンド実行に必要な最小限の状態のみ保持し、読み取り責務はリードモデルに委譲する。

問題: 肥大化した集約

典型例: Thread集約が1000件のメッセージを保持

// 従来型: 集約がすべてのデータを保持
case class Message(id: MessageId, text: MessageText, senderId: AccountId,
                   createdAt: Instant, updatedAt: Instant)
case class Messages(values: List[Message])

class Thread(id: ThreadId, members: Members, messages: Messages,
             createdAt: Instant)

更新時の問題

1. threadRepository.findById(threadId)
   → 1000件のメッセージを含むスレッド全体をDBから取得

2. thread.addMessage(...)
   → メッセージを1件追加

3. threadRepository.store(newThread)
   → 1001件全体をDBに更新
   → どのフィールドが更新されたか不明なため、全情報を更新する必要がある

1件のメッセージ追加のために1001件を更新する。 これは集約が「コマンドに必要なデータ」と「クエリに必要なデータ」を区別せずに保持していることが原因。

差分更新の誘惑

差分更新を実装しようとすると、集約の内部実装が複雑化する。どのフィールドが変更されたかを追跡する仕組みが必要になり、ドメインロジックとインフラの関心が混在する。

解決: CQRSによる集約の再設計

核心原則

CQRSを導入すると、集約はコマンド実行に必要な最小限の状態だけ持てばよい。

読み取り責務(クエリ)を集約から完全に除去し、リードモデルに委譲する。その結果、集約はコマンドの検証に必要な情報のみ保持する。

問い: このコマンドの検証に何が必要か?

Thread集約の場合、「メッセージ追加」コマンドの検証に必要なのは:

  • 送信者がスレッドのメンバーであること → メンバーIDのリストが必要
  • メッセージIDの重複がないこと → メッセージIDのリストが必要

メッセージの本文は不要。 本文は表示(クエリ)のために必要であり、コマンドの検証には関係ない。

再設計後の集約

// CQRS/ES: 集約はコマンド検証に必要な最小限の状態のみ保持
class Thread(id: ThreadId, memberIds: MemberIds, messageIds: MessageIds,
             createdAt: Instant) {

  def addMessage(messageId: MessageId, messageText: MessageText,
                 senderId: AccountId): Either[ThreadError, Thread] =
    if (memberIds.contains(senderId)) {
      // イベントを追記するだけ。1001件の更新は発生しない
      persistEvent(MessageAdded(id, messageId, messageText, senderId, Instant.now))
      Right(copy(messageIds = messageIds.add(messageId)))  // IDのみ追加
    } else {
      Left(new AddMessageError)
    }
}

メッセージ本文を持たないため、集約は大幅に軽量化される。

イベントの設計

sealed trait ThreadEvent

case class MemberAdded(threadId: ThreadId, accountId: AccountId,
                       occurredAt: Instant) extends ThreadEvent

case class MessageAdded(threadId: ThreadId, messageId: MessageId,
                       messageText: MessageText, senderId: AccountId,
                       occurredAt: Instant) extends ThreadEvent

case class MessageUpdated(threadId: ThreadId, messageId: MessageId,
                         messageText: MessageText, senderId: AccountId,
                         occurredAt: Instant) extends ThreadEvent

イベントにはメッセージ本文を含める(リードモデル構築に必要なため)。ただし、集約の状態復元時にはIDのみを反映する。

リードモデル(Q側)

// イベントを消費してリードモデルを構築
consumeEventsByThreadIdFromDDBStreams.foreach {
  case ev: MemberAdded   => insertMember(ev)
  case ev: MessageAdded  => insertMessage(ev)
  case ev: MessageUpdated => updateMessage(ev)
}

// リードモデルはクエリに最適化されたDTO
case class MessageDto(id: Long, threadId: Long, text: String,
                     senderId: Long, createdAt: Instant, updatedAt: Instant)

// 部分取得が可能(ページネーション等)
val messages: Seq[MessageDto] =
  MessageDao.findAllByThreadIdWithOffsetLimit(threadId, 0, 100)

Before / After 比較

観点従来型(非CQRS)CQRS/ES
集約の状態メッセージ全文を保持メッセージIDのみ保持
メッセージ追加全件更新イベント1件追記
読み取り集約から直接取得リードモデルから取得
メモリ使用量メッセージ数に比例して増大ID数に比例(軽量)
ページネーション集約内で実装(複雑)リードモデルのDAO(自然)

集約の境界再定義の考え方

判断基準: コマンドの検証に必要か?

集約が保持すべきデータを決めるには、各コマンドの検証ロジックを分析する。

集約が現在保持しているデータ
    ↓
各フィールドについて:
    「このデータはコマンドの検証に使われるか?」
    ├─ YES → 集約に残す
    └─ NO → クエリ専用データ → リードモデルへ移動

具体例: Thread集約の分析

データコマンド検証に必要か判断
メンバーID一覧YES(送信者がメンバーか確認)集約に残す
メッセージID一覧YES(重複チェック)集約に残す
メッセージ本文NO(表示のみ)リードモデルへ
送信者名NO(表示のみ)リードモデルへ

強い整合性の再検討

CQRSを導入する際に問うべき:

スレッドとメッセージの関係性に強い整合性は必要か?
  • メッセージの追加・表示に「メッセージ本文の即時一貫性」は不要
  • メンバーシップの確認にのみ強い一貫性が必要
  • 振る舞いがイメージできれば集約の構造が明確になる

大きすぎる集約の兆候と対処

兆候

兆候原因
集約の読み込みが遅い不要なデータを大量に保持
更新時に全件SQLが発生差分が追跡できない
集約内にページネーションロジッククエリ責務が混在
DTOと集約の構造が酷似クエリ用データがそのまま集約に

対処フロー

集約が大きすぎる
    ↓
1. 各フィールドを「コマンド検証用」と「クエリ用」に分類
    ↓
2. クエリ用データをリードモデルへ移動(CQRSの導入)
    ↓
3. 集約はIDリストや状態フラグなど最小限の状態のみ保持
    ↓
4. イベントで状態変更を記録し、リードモデルはイベントから構築

関連スキルとの関係

スキル関係
aggregate-design集約の内部設計原則。本スキルはCQRSによる境界の再定義
cqrs-to-event-sourcingなぜESが必要か。本スキルはES前提のモデリング変革
cqrs-tradeoffs一貫性・可用性のトレードオフ。本スキルはモデリングへの影響

レビューチェックリスト

集約の肥大化

  • 集約がクエリ専用データ(表示名、計算結果等)を保持していないか
  • 集約の読み込みにパフォーマンス問題がないか
  • 更新時に不要な全件更新が発生していないか

CQRS/ESによる再設計

  • 各フィールドが「コマンド検証に必要か」で分類されているか
  • クエリ専用データはリードモデルに委譲されているか
  • 集約はIDリスト等の最小限の状態のみ保持しているか
  • イベントにはリードモデル構築に必要な情報がすべて含まれているか

境界の妥当性

  • 集約内のデータすべてに強い整合性が本当に必要か再検討したか
  • 振る舞い(コマンド)に基づいて集約の境界を決めているか
  • 結果整合性で十分なデータを集約から分離しているか

関連スキル(併読推奨)

このスキルを使用する際は、以下のスキルも併せて参照すること:

  • cqrs-to-event-sourcing: イベントソーシングが集約モデリングを変える理由
  • aggregate-design: CQRS適用前の基本的な集約設計ルール
  • cqrs-tradeoffs: CQRS採用のトレードオフ分析

平台分布

Codex

34.88%
按下载量换算58

Claude

28.73%
按下载量换算48

Cursor

18.92%
按下载量换算31

Gemini CLI

9.76%
按下载量换算16

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

权限未标注

当前来源未能明确判断权限范围,默认进入异常复核队列。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills