Claude CodeでUnit of Workパターンを設計する:複数リポジトリのトランザクション統一・変更追跡・原子コミット
はじめに 「複数のリポジトリを使う処理でトランザクションが統一されていなかった」——Unit of Workパターンで複数リポジトリへの変更を1つのトランザクションにまとめ、原子的にコミット/ロールバックする設計をClaude Codeに生成させる。 CLAUDE.mdにUnit of Work設計ルールを書く ## Unit of Workパターン設計ルール ### 役割 - 1つのユース...

Source: DEV Community
はじめに 「複数のリポジトリを使う処理でトランザクションが統一されていなかった」——Unit of Workパターンで複数リポジトリへの変更を1つのトランザクションにまとめ、原子的にコミット/ロールバックする設計をClaude Codeに生成させる。 CLAUDE.mdにUnit of Work設計ルールを書く ## Unit of Workパターン設計ルール ### 役割 - 1つのユースケース(トランザクション)スコープを管理 - スコープ内で取得した集約を追跡(変更検出) - commit()で全変更を一括保存、rollback()で全変更を取り消し ### リポジトリとの関係 - リポジトリはUoWが管理するDBコネクション/Prismaトランザクションを使用 - UoWを通じてリポジトリを取得する(UoW.getOrderRepository()) - UoW外でリポジトリを直接使用しない ### Prismaとの統合 - Prisma.$transaction(async (tx) => { ... }) をUoWのスコープとして使用 - リポジトリはPrismaトランザクション(tx)を受け取る Unit of Work実装の生成 Unit of Workパターンを設計してください。 要件: - Prismaトランザクションとの統合 - リポジトリアクセスのファクトリー - ドメインイベントの収集とコミット後の発行 - エラー時の自動ロールバック 生成ファイル: src/infrastructure/unitOfWork/ 生成されるUnit of Work実装 // src/infrastructure/unitOfWork/unitOfWork.ts — Unit of Work export interface IUnitOfWork { orderRepository: IOrderRepository; userRepository: IUserRepository; inventoryRepository: IInventoryRepository; commit(): Promise<void>; rollback(): Promise<void>; } export class PrismaUnitOfWo