مهارت Claude برای event sourcing در لاراول
خلاصهٔ کاملتر
Alberto Arena چند وقت پیش یه پکیج لاراول منتشر کرده بود که با یه دستور artisan، ساختار کامل event sourcing — شامل aggregate، event، projector و بقیه بویلرپلیتها — رو تولید میکرد. اون پکیج بیش از ۸۰۰۰ بار دانلود شد، ولی یه محدودیت اساسی داشت: میتونست فایلها رو بسازه، ولی نمیتونست کمکت کنه طراحی رو فکر کنی.
مشکل اینه که بخش سخت event sourcing نوشتن کلاس aggregate نیست؛ سختترین قسمت اینه که بفهمی aggregate چی باید باشه، کدوم eventها از یه boundary رد میشن، و کجا projector تموم میشه و reactor شروع. ابزار جدید این تصمیمها رو به یه گفتگو تبدیل میکنه.
ابزار جدید یه Claude Code skill هست، نه پکیج Composer. یعنی توی پوشه .claude/skills/ پروژهات نصبش میکنی و از طریق Claude Code باهاش کار میکنی. کارش رو در دو مرحله انجام میده. مرحله اول (طراحی): Claude پنج سوال هدفمند درباره دامنهات میپرسه — فیچر چیه، چه state transitionهایی داری، چی command رو trigger میکنه، آیا به read model نیاز داری، و side effectها کدومان. بر اساس جوابها یه ADR (Architecture Decision Record) میسازه که همه چیز رو مستند میکنه.
مرحله دوم (پیادهسازی): بعد از اینکه ADR رو تأیید کردی، کد کامل دامنه رو به ترتیب تولید میکنه: اول ساختار دایرکتوری، بعد تستها (رویکرد TDD)، سپس commandها و handlerها، aggregate root، eventها، projectorها با migrationها، reactorها، و در نهایت ثبت در config. اگه حین پیادهسازی به ابهامی برخورد که در ADR نبود، میایسته و میپرسه.
خروجی نهایی یه دامنه کامل زیر app/Domain// هست — از aggregate تا read model — به همراه تستهایی که پاس میشن و migrationهای آماده. ابزار عمداً محدودهاش رو باریک نگه داشته: فقط با spatie/laravel-event-sourcing نسخه ۷ کار میکنه و برای refactor کردن اپهای CRUD موجود مناسب نیست.
نیازمندیها: Laravel 10 به بالا، PHP 8.2+، Spatie event sourcing v7، و Pest یا PHPUnit. ابزار در نسخه v0.1.0 هست و کدش روی GitHub در دسترسه.
نکات کلیدی:
- این ابزار پکیج Composer نیست، بلکه یه Claude Code skill هست
- قبل از تولید هر کدی، یه گفتگوی طراحی انجام میده و ADR میسازه
- پیادهسازی رو با رویکرد TDD انجام میده — تستها اول نوشته میشن
- فقط با Spatie event sourcing v7 کار میکنه و scope عمداً محدود نگه داشته شده
- برای پروژههای جدید مناسبه، نه بازنویسی اپهای CRUD موجود




