در این پست، به بررسی مفهوم Consistency در طراحی مبتنی بر DDD میپردازیم. انواع مختلف یکپارچگی دادهها، از جمله Atomic Consistency و Eventual Consistency، و تأثیر آنها بر طراحی سیستمهای نرمافزاری مورد بحث قرار میگیرند. همچنین، ارتباط این مفاهیم با قواعد ACID، BASE و CAP تحلیل شده و با ارائه یک مثال عملی از سیستم حراجی (Auction)، نحوه پیادهسازی این اصول در یک مدل دامنه نشان داده میشود.

در طراحی سیستمهای نرمافزاری، حفظ یکپارچگی دادهها (Consistency) یکی از چالشهای اساسی است. در Domain Driven Design، این مفهوم نقش کلیدی در طراحی مدل دامنه و تعیین مرزهای Aggregateها دارد. در این پست، به بررسی دو رویکرد اصلی در یکپارچگی دادهها میپردازیم:
انواع Consistency
Atomic Consistency
در این نوع یکپارچگی، عملیات به صورت Atomic انجام میشود، یعنی یا تمام مراحل با موفقیت اجرا میشوند یا هیچکدام اجرا نمیشوند. مثال کلاسیـک این مفهوم، انتقال پول بین دو حساب است:
این رویکرد مبتنی بر اصول ACID (Atomic Consistent Isolated Durable) است.
Eventual Consistency
در این مدل، سیستم ممکن است در لحظهای خاص ناسازگار باشد، اما در نهایت به حالت یکپارچه میرسد. برای مثال:
قاعده CAP و تأثیر آن بر Consistency
قاعده CAP بیان میکند که در یک سیستم توزیعشده، تنها دو مورد از سه ویژگی زیر را میتوان همزمان تضمین کرد:
مثال:
فرض کنید یک دیتابیس به سه Node تقسیم شده است:
کاربرد Consistency در Domain Driven Design
در DDD، مفهوم Aggregateها مرزهای تراکنشی را تعیین میکنند:
مثال عملی: سیستم حراجی (Auction)
در یک سیستم حراجی، موجودیتهای اصلی شامل:
و Invariantهای سیستم شامل:

طراحی Aggregate:
مدیریت Eventual Consistency
در این سیستم، ممکن است بین ذخیرهی WinningBid و Bid تأخیر وجود داشته باشد. اما از آنجا که کاربران بیشتر به آخرین پیشنهاد توجه دارند، این تأخیر مشکلی ایجاد نمیکند. راهحلهای ساده مانند نمایش زمان آخرین بهروزرسانی میتواند شفافیت را افزایش دهد.
نتیجهگیری
انتخاب نوع Consistency به نیازهای کسبوکار و معماری سیستم بستگی دارد:
در DDD، طراحی Aggregateها نقش کلیدی در تعیین مرزهای تراکنشی و مدیریت یکپارچگی دادهها دارد.