
آموزش طراحی دامنه محور (Domain Driven Design) و EF Core
آموزش ویدئویی طراحی دامنه محور (Domain Driven Design) و EF Core یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته ی آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه ی فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته ی آموزشی طراحی دامنه محور (Domain Driven Design) و EF Core حفظ کردن Encapsulation است که با نام اصلی DDD and EF Core - Preserving Encapsulation از شرکت Pluralsight منتشر شده است.
طراحی دامنه محور (Domain Driven Design) چیست؟
طراحی دامنه محور یا همان Domain Driven Design در واقع درک نیازهای واقعی کسب و کار مشتری است. ما باید درباره دامنه های مختلف مانند بانکداری، مخابرات، زنجیره تامین، مراقبت های بهداشتی و… دانش داشته باشیم. بنابراین در اینجا دامنه به معنی دانش کسب و کار درباره صنعت خاص است. به طور مشابه طراحی دامنه محور تمرکز بیشتری نسبت به نیازهای کسب و کار دارد نه به تکنولوژی. برای شروع نوشتن یک سیستم، باید بدانیم که مشتری چه چیزی را مد نظر دارد، در حین فاز اولیه هیچگاه درباره برنامه نویسی و معماری آن فکر نمیکنید. هدف اصلی شما درک تمام شرایط کسب و کار مشتری و چگونگی مدل دامنه مورد نیاز او است.

بنابراین چیزی که ما به دنبال آن هستیم بحث با مشتری درباره نیازهای کسب و کار او است. Domain Driven Design صرفاً بر اساس این فرضیات برای ترسیم کردن نیازهای کسب و کار در مدل دامنه است. طراحی دامنه محور همه چیز درباره چگونگی طراحی مدل دامنه شماست. به این معنا که هر کلاس دامنه باید یک رابطه مستقیم با آنچه که در دامنه کسب و کار است داشته باشد.
کپسوله سازی (Encapsulation) چیست؟
در برنامه نویسی شی گرا کپسوله سازی و یا encapsulation به معنی گروه بندی کردن داده ها به همراه متدهایی است که بر روی آن داده ها کار می کنند. علاوه بر این این کپسوله سازی به معنی محدود کردن دسترسی مستقیم به برخی از اجزای تشکیل دهنده یک object می باشد.

در واقع از encapsulation برای مخفی کردن مقادیر و یا state مربوط به object ها استفاده می شود تا اشخاصی که حق دسترسی مستقیم به آنها ندارند اجازه و امکان انجام چنین کاری را نداشته باشند. درک دقیق و پیاده سازی صحیح کپسول سازی در طراحی شی گرا یک موضوع بسیار بسیار مهم است که باید به آن توجه ویژه شود.
چگونه Backing Field ها از ساختار داخلی Entity محافظت میکنند؟
در پروژههای مبتنی بر Domain Driven Design، کلاسهای دامنه نباید صرفاً مجموعهای از Property های قابلتغییر باشند؛ آنها باید بتوانند قواعد و محدودیتهای کسبوکار را حفظ کنند. این آموزش پیشرفته نشان میدهد چگونه میتوان با استفاده از Backing Field ها، Collection های داخلی یک Entity را از دسترسی مستقیم بیرونی دور نگه داشت و در عین حال امکان نگاشت آنها به کمک Entity Framework Core را حفظ کرد. درسهای مربوط به مخفی کردن Collection و حذف یک Item از آن، مسئله کنترل تغییرات درون مدل دامنه را به نمونههای مشخص تبدیل میکنند.
این رویکرد زمانی اهمیت پیدا میکند که تغییر یک رابطه یا اضافه شدن یک عضو به Collection باید از مسیر مشخصی انجام شود، نه با دستکاری آزادانه وضعیت شیء. مباحث مربوط به کلاس Base Entity و الگوی Identity Map نیز به درک بهتر هویت Entity ها و نحوه مدیریت آنها در زمان کار با داده کمک میکنند. به این ترتیب، محتوای آموزش میان طراحی کلاسهای دامنه و نیازهای نگاشت ORM ارتباط برقرار میکند و به توسعهدهنده نشان میدهد چگونه میتوان از انعطاف EF Core استفاده کرد، بدون اینکه کنترل مدل دامنه بهسادگی از دست برود.
مدیریت دادههای بارگذاریشده و پیادهسازی Domain Event در EF Core
بخش دیگری از آموزش به تفاوت روشهای بارگذاری رابطهها اختصاص دارد؛ از جمله Eager Loading و Lazy Loading در ارتباط با Relationship های موجود در مدل. انتخاب روش مناسب میتواند بر نحوه دریافت داده و زمان اجرای Query ها اثر بگذارد، بهخصوص وقتی یک Entity با چندین رابطه به اشیای دیگر متصل است. همچنین مباحث مربوط به رابطههای Many-to-one و نگاشت Value Object ها، جنبههای متفاوتی از مدلسازی دامنه را پوشش میدهند. بررسی Owned Entity Type ها نیز نشان میدهد چگونه میتوان اشیایی را که هویت مستقل ندارند، در مدل EF Core نگاشت کرد.
در سناریوهایی که Entity از Context جدا شده و سپس دوباره به آن متصل میشود، مدیریت Object Graph های Disconnected به توجه ویژه نیاز دارد. آموزش نحوه انتساب یک Disconnected Entity به یک Entity متصل را بررسی میکند و در کنار آن، به پیادهسازی Domain Event ها و Domain Event Dispatcher میپردازد. این ترکیب برای توسعهدهندگانی مفید است که میخواهند تغییرات مهم مدل دامنه را از منطق واکنش به آن تغییرات جدا کنند. آشنایی با این موضوعات به تصمیمگیری درباره مرزهای مسئولیت، نگاشت داده و هماهنگی عملیات در معماری مبتنی بر DDD کمک میکند.
سرفصل مطالب آموزش ویدئویی طراحی دامنه محور (Domain Driven Design) و EF Core
فصل اول: مقدمه دوره آموزشی- مقدمه دوره آموزشی
- مقدمه
- بررسی Encapsulation و Separation of Concerns
- بررسی مثال هایی از اهمیت Encapsulation و Separation of Concerns
- معرفی برنامه مربوط به این دوره آموزشی
- جمع بندی
- مقدمه
- بررسی Encapsulation در کلاس DbContext
- مرور اهمیت Encapsulation در کلاس DbContext
- حذف کردن Public Setter های مربوط به Property ها
- مرور اهمیت حذف کردن Public Setter های مربوط به Property ها
- بررسی انواع Relationship ها
- بررسی Relationship های Many-to-one و مقایسه ID و Navigation Property ها
- ریفکتور کردن به سمت Navigation Property ها
- مرور اهمیت ریفکتور کردن و رفتن به سمت Navigation Property ها
- جمع بندی
- مقدمه
- انجام Eager Loading بر روی Relationship ها
- انجام Lazy Loading بر روی Relationship ها
- ریفکتور کردن و رفتن به سمت Lazy Loading
- مرور اهمیت ریفکتور کردن و استفاده از Lazy Loading
- بررسی الگوی Identity Map Pattern
- اهمیت Identity Map Pattern و Referential Equality
- انجام Encapsulation برای Equality Comparison
- معرفی کردن یک کلاس Base Entity
- مرور اهمیت استفاده از یک کلاس Base Entity
- جمع بندی
- مقدمه
- معرفی رابطه های One-to-many / قسمت اول
- معرفی رابطه های One-to-many / قسمت دوم
- مرور اهمیت رابطه های One-to-many
- مخفی کردن Collection های پشت Backing Field ها
- مرور مخفی کردن Collection های پشت Backing Field ها
- معرفی کردن یک Collection Invariant
- مرور Collection Invariant مطرح شده
- حذف کردن یک Item از درون یک Collection
- مرور روند حذف کردن یک Item از درون یک Collection
- محدودیتهای اعمال Mapping به Backing Field ها در EF Core
- جمع بندی
- مقدمه
- بررسی یک Use Case جدید: رجیستر کردن یک Student
- مرور اضافه شدن قابلیت رجیستر شدن یک Student
- بررسی متدهای Update و Attach در کلاس DbSet
- مرور متدهای Add و Update و مقایسه آنها با متد Attach در DbSet
- انتصاب دادن یک Disconnected Entity به یک Connected Entity
- مرور انتصاب یک Disconnected Entity به یک Connected Entity
- جمع بندی
- مقدمه
- معرفی یک Value Object: Email
- محدودیت های EF Core و مبحث Value Conversion
- معرفی کردن یک Multi-property Value Object
- بررسی Owned Entity Type های مربوط به Entity Framework Core
- مرور قابلیت Owned Entity Type ها
- اضافه کردن یک Navigation Property به یک Owned Entity
- جمع بندی
- مقدمه
- بررسی Domain Event ها
- پیاده سازی Domain Event ها
- مرور پیاده سازی Domain Event ها
- بررسی Relationship های Many-to-many
- معرفی منابع مفید
- جمع بندی دوره آموزشی






