用語集
この用語集では、MBC CQRS Serverlessフレームワークのドキュメント全体で使用される主要な用語と概念の定義を提供します。
デザインパターン
CQRS(コマンドクエリ責任分離)
コマンド クエリ責任分離 (CQRS) パターンは、データの変更、つまりシステムのコマンド部分をクエリ部分から分離します。スループット、レイテンシ、一貫性などの 要件が異なる場合は、CQRS パターンを使用して更新とクエリを分離できます。 CQRS パターンは、アプリケーションをコマンド側とクエリ側の 2 つの部分に分割します。コマンド側は、作成、更新、削除のリクエストを処理します。クエリ側はリードレプリカを使用してクエリ部分を実行します。

See: CQRS パターン
イベントソーシング
イベント ソーシング パターンは通常、読み取りワークロードと書き込みワークロードを分離し、パフォーマンス、スケーラビリティ、セキュリティを最適化するために CQRS パターンとともに使用されます。データは、データ ストアへの直接更新ではなく、一連のイベントとして保存されます。マイクロサービスは、イベント ストアからイベントを再生して、独自のデータ ストアの適切な状態を計算します。このパターンは、アプリケーションの現在の状態を可視化し、アプリケーションがその状態にどのように到達したかについての追加のコンテキストを提供します。コマンド データ ストアとクエリ データ ストアのスキーマが異なる場合でも、特定のイベントのデータを再現できるため、イベント ソ ーシング パターンは CQRS パターンと効果的に連携します。
See: イベントソーシングパターン
楽観的ロック
リソースをロックせずに複数のトランザクションを進行させる並行性制御メカニズム。コミット前に、システムは別のトランザクションがデータを変更したかどうかを確認します。MBC CQRS Serverlessでは、バージョン番号を使用して実装されています - 各更新には現在のバージョンを含める必要があり、バージョンが一致しない場合は更新が失敗します。
ドメイン駆動設計(DDD)
ビジネスドメインに基づいてソフトウェアをモデリングすることに焦点を当てたソフトウェア設計アプローチ。主要な概念には、エンティティ、値オブジェクト、集約、境界づけられたコンテキストが含まれます。MBC CQRS ServerlessはDDDの原則を使用してモジュールとエンティティを構造化します。
集約
単一のユニットとして扱うことができるドメインオブジェクトのクラスター。集約にはルートエンティティ(集約ルート)と集約内の内容を定義する境界があります。MBC CQRS Serverlessでは、各コマンドテーブルは通常、集約を表します。
フレームワークの概念
コマンド
システムの状態を変更するリクエスト。コマンドはCQRSパターンのコマンド側で処理されます。MBC CQRS Serverlessでは、コマンドはCommandServiceを使用して発行され、DynamoDBコマンドテーブルに保存されます。
コマンドテーブル
コマンド(書き込み)モデルを保存するDynamoDBテーブル。バージョン追跡による変更の完全な履歴を含みます。データはDynamoDB Streamsを介してコマンドテーブルからデータテーブルに流れます。
データテーブル
データ(読み取り)モデルを保存するDynamoDBテーブル。クエリ用に最適化されたエンティティの現在の状態を含みます。 コマンドが処理されると自動的に更新されます。
データ同期ハンドラー
DynamoDB Streamイベントを処理してテーブル間またはRDSなどの外部システムとデータを同期するハンドラー。IDataSyncHandlerインターフェースを実装します。
呼び出しコンテキスト
ユーザー情報、テナントコンテキスト、リクエストメタデータを含むサービスメソッドに渡されるコンテキストオブジェクト。Lambdaイベントから作成され、認可と監査に使用されます。
パーティションキー(PK)
パーティション間のデータ分散を決定するDynamoDBのプライマリキーコンポーネント。MBC CQRS Serverlessでは、通常TYPE#tenantCode形式(例:ORDER#tenant001)。
ソートキー(SK)
パーティション内での範囲クエリを可能にするDynamoDBのセカンダリキーコンポーネント。MBC CQRS Serverlessでは、データテーブルでは通常TYPE#code形式、コマンドテーブルではTYPE#code@vN形式。
テナント
マルチテナントアプリケーションにおける分離された組織単位。各テナントはテナントコードで識別される独自のデータパーティションを持ちます。テナントはアプリケーションインフラストラクチャを共有しますが、データは完全に分離されています。
バージョン
エンティティのリビジョン履歴を追跡する番号。更新ごとにインクリメントされます。同時更新の競合を防ぐための楽観的ロックに使用されます。
CommandModel
publishAsync、publishSync などのメソッドが返すTypeScript型。pk、sk、version、tenantCode、attributes などのメタデータを含むコマンド操作の結果をカプセル化します。コマンドが変更なし(no-op)の場合は null を返すことがあります。
DataEntity
データ(読み取り側)テーブルに保存されるエンティティの基底クラス。型付きアクセサーとヘルパーメソッドでDynamoDBの生アイテムを拡張します。DataService.getItem() と DataService.listItemsByPk() の戻り値型として使用されます。
CommandEntity
コマンドテーブルに保存されるエンティティの基底クラス。バージョン、テナント、属性変更を含むコマンド履歴全体を追跡します。主にデータ同期ハンドラーでコマンド側の状態を読み取るために使用されます。
DetailKey
pk(パーティションキー)と sk(ソートキー)を含む、DynamoDB内の特定のアイテムを識別するキーオブジェクト。getItem({ pk, sk }) や getLatestItem({ pk, sk }) などのメソッドに渡されます。
VERSION_FIRST
まだ存在しない新しいエンティティを作成する際にバージョンとして使用する値 0 の定数。フレームワークは最初の書き込み成功時にバージョン 1 を設定します。@mbc-cqrs-serverless/core からインポートします。
VERSION_LATEST
楽観的ロックをバイパスしてエンティティの最新バージョンへ自動解決するようフレームワークに指示するための値 -1 の定数。「最後の書き込みが勝つ」セマンティクスが意図的な場合にのみ使用してください。@mbc-cqrs-serverless/core からインポートします。
AWSサービス
Amazon DynamoDB
シームレスなスケーラビリティで高速かつ予測可能なパフォーマンスを提供するフルマネージドNoSQLデータベースサービス。MBC CQRS ServerlessはDynamoDBをコマンドテーブルとデータテーブルの両方のプライマリデータストアとして使用します。
DynamoDB Streams
DynamoDBテーブルのデータ変更イベントをキャプチャする機能。MBC CQRS Serverlessがコマンドテーブルとデータテーブル間、および外部システムへのデータ同期をトリガーするために使用します。