CodeShot
Seniorسختی 4 از ۵· در 68٪ مصاحبه‌های این حوزه پرسیده شده

Aggregate Root چیست و چرا اهمیت دارد؟

نشان کردن

پاسخ کوتاه

ریشهٔ یک گروه از Entity/Value Objectهای مرتبط که تنها نقطهٔ مجاز برای تغییر کل گروه است؛ تضمین می‌کند قواعد سازگاری (Invariant) همیشه رعایت شوند.

پاسخ کامل

اگر بتوان مستقیماً به یک OrderLine داخل Order دسترسی داد و آن را بدون عبور از Order تغییر داد، قواعدی مثل «مجموع مبلغ سفارش نباید منفی شود» به‌راحتی نقض می‌شوند. با محدود کردن تغییرات فقط از طریق Aggregate Root (Order)، این قواعد همیشه اعمال می‌شوند.

مثال کد

// درست: تغییر فقط از طریق Order (Aggregate Root)
order.AddLine(product, 2);

// غلط: دستکاری مستقیم لیست داخلی از بیرون
order.Lines.Add(new OrderLine(product, 2));

نکته مهم

در پیاده‌سازی، معمولاً کالکشن‌های داخلی Aggregate به‌صورت private/readonly نگه داشته می‌شوند تا دسترسی مستقیم از بیرون ممکن نباشد.

اشتباه رایج

❌ ساختن یک Aggregate بسیار بزرگ که کل دیتابیس را در بر می‌گیرد (باعث قفل‌شدگی و کاهش کارایی می‌شود).