TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 550 subscribers
Post #629 264
📌Domain Driven Design : A Model Expressed in Software


در تصور معمول ما، یک شخص دارای هویتی است که از تولد تا مرگ و حتی فراتر از آن امتداد می‌یابد. ویژگی‌های فیزیکی آن شخص تغییر می‌کنند و در نهایت از بین می‌روند. نام ممکن است تغییر کند. روابط مالی به وجود می‌آیند و از بین می‌روند. حتی یک ویژگی هم در انسان وجود ندارد که تغییرناپذیر باشد؛ با این حال، هویت باقی می‌ماند. آیا من همان فردی هستم که در پنج‌سالگی بودم؟ این نوع پرسش متافیزیکی در جستجوی مدل‌های دامنه (domain models) مؤثر اهمیت دارد.
با بیانی کمی متفاوت: آیا کاربرِ اپلیکیشن اهمیتی می‌دهد که من همان فردی هستم که در پنج‌سالگی بودم؟

دو واریز (deposit) با مبلغ یکسان، به یک حساب یکسان، در یک روز یکسان، همچنان دو transaction متمایز محسوب می‌شوند.بنابراین دارای هویت هستند و یک ENTITY به شمار می‌آیند.
از سوی دیگر، attribute مبلغ این دو transaction احتمالاً instanceهایی از یک Object از نوع money هستند. این مقادیر هیچ هویتی ندارند، زیرا تمایز میان آن‌ها هیچ سودمندی‌ای ندارد.
در واقع، ممکن است دو Object دارای هویت یکسان باشند، بدون آنکه attributeهای یکسانی داشته باشند یا حتی الزاماً از یک class یکسان باشند.

در واقع، ممکن است یک چیز واحد در دنیای واقعی در یک domain model به‌صورت یک ENTITY نمایش داده شود یا اصلاً چنین نباشد.
برای مثال، یک application جهت رزرو صندلی در یک استادیوم ممکن است صندلی‌ها (seat) و شرکت‌کنندگان (attendee) را به‌عنوان ENTITY در نظر بگیرد.
در حالت assigned seating که روی هر بلیت شماره صندلی درج شده است، صندلی یک ENTITY محسوب می‌شود. شناسه (identifier) آن شماره صندلی است که در محدوده‌ی استادیوم یکتا (unique) است.
صندلی ممکن است attributeهای دیگری نیز داشته باشد، مانند:
• موقعیت مکانی
• داشتن یا نداشتن دیدِ مسدود
•‌ قیمت
اما تنها شماره صندلی یا ترکیب یکتای ردیف (row) و موقعیت (position) برای شناسایی و تمایز صندلی‌ها استفاده می‌شود.
از سوی دیگر، اگر رویداد از نوع general admission باشد به این معنا که دارندگان بلیت در هر صندلی خالی که پیدا کنند می‌نشینند نیازی به تمایز میان صندلی‌های منفرد وجود ندارد.
در این حالت، تنها تعداد کل صندلی‌ها اهمیت دارد. با اینکه شماره صندلی‌ها همچنان به‌صورت فیزیکی روی صندلی‌ها حک شده‌اند، هیچ نیازی نیست که software آن‌ها را ردیابی کند.
در واقع، اگر مدل شماره صندلی خاصی را به بلیت‌ها نسبت دهد، این یک خطای مدلسازی خواهد بود؛ زیرا در یک رویداد با general admission چنین محدودیتی وجود ندارد.
در چنین شرایطی، صندلی‌ها دیگر ENTITY نیستند و هیچ identifierای نیز موردنیاز نخواهد بود.

🔖هشتگ‌ها :
#DDD #DomainModel
#Entity
More from @csharpgeeks
  1. Sep 22, 2026یه مدتی قراره از دنیای NET. فاصله بگیرم، چون وقتشه برم سربازی. راستش نمیدونم این مدت رو چج…
  2. Sep 20, 2026🔥 حالا مشکل اصلی: Alert Storm فرض کن Database از دسترس خارج شده. ۱۰۰ Pod داری. هر Pod می‌…
  3. Sep 20, 2026🚨 طراحی سیستم Monitoring و Alerting در یک سیستم بزرگ فرض کن ساعت ۳ صبح است. سیستم شما با…
  4. Sep 19, 2026#Engineering_Leadership تصمیم نگرفتن هم یک تصمیم است یه چیز عجیب توی تیم‌های مهندسی: گاهی…
  5. Sep 19, 2026☑ چک‌لیست آماده‌سازی تیم، فرایندها و زیرساخت برای توسعه با AI توجه: هیچ چک‌لیستی جهان‌شمول…
  6. Sep 19, 2026📌پایان یک انتظار طولانی: اعتبارسنجی ناهمگام (Async Validation) در NET 11.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →