آموزش طراحی دامنه محور در سی شارپ Domain Driven Design

Domain Driven Design
تعداد ویدئو 95
زمان دوره 04:49:12
مترجم مرتضی گیتی
دوبلر مرتضی گیتی
سایت منتشر کننده پلورال سایت

آموزش طراحی دامنه محور در سی شارپ Domain Driven Design یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته ی آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه ی فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته ی آموزشی طراحی دامنه محور و میکروسرویس ها در سی شارپ است که با نام اصلی آموزش طراحی دامنه محور در سی شارپ Domain Driven Design Fundamentals از شرکت Pluralsight منتشر شده است.

طراحی دامنه محور یا Domain-Driven Design چیست؟

طراحی دامنه محور برای توسعه نرم افزار و همچنین جلوگیری از پیچیدگی آن است. هدف اصلی Domain-Driven Design در توسعه نرم افزار این است که با اتصال به قسمت های مربوط به نرم افزار در حال توسعه، ساختن برنامه های پیچیده را آسان کند. به عبارت دیگر DDD بر سه اصل اصلی تمرکز می کند:

  • بر core domain و domain logic تمرکز دارد.
  • می توانید پایه و اساس طرحهای پیچیده را بر اساس مدلهای domain تنظیم کنید.
  •  به طور مداوم با متخصصان domain همکاری دارید تا مدل برنامه را بهبود بخشیده و هر گونه مسائل مرتبط با domain را حل کنید.

در طراحی دامنه محور، اریک ایونز چند اصطلاح رایج را که هنگام توصیف و بحث در مورد فاکتور ها و روش هایی که در DDD مفید هستند، اینگونه بیان می کند:

  • Context: تنظیماتی که در آن یک کلمه یا یک عبارت نمایش داده می شود و معنای آن را تعیین می کند. در واقع جملات در مورد یک مدل فقط در یک Context قابل درک است.
  • Model: سیستمی از abstraction ها که aspect های انتخاب شده یک domain را توصیف می کند و می تواند برای حل مشکلات مربوط به آن domain مورد استفاده قرار گیرد.
  • Ubiquitous Language: زبان فراگیر یا Ubiquitous Language زبانی است که حول محور domain model سازماندهی می شود و توسط همه اعضای تیم به منظور ارتباط برقرار کردن فعالیت های تیم با نرم افزار در دست ساخت مورد استفاده قرار می گیرد.
  • Bounded Context: توصیف یک مرز یا boundary (معمولاً یک زیر سیستم، یا کار یک تیم خاص) که در آن یک مدل خاص تعریف شده و قابل اجرا است.

Domain-Driven-Design-Fundamentals-snapshot

بررسی Building Block ها

طراحی دامنه محوریا همان Domain-driven design تعدادی از مفاهیم سطح بالا را تعریف می کند که می توانند در کنار یکدیگر برای ایجاد و اصلاح domain model ها استفاده شوند:

  • Entity: یک object می باشد که بر اساس تداوم پیوسته اش تعریف می شود، در مقایسه با object های سنتی که توسط attribute هایشان تعریف می شوند.
  • Value Object: یک آبجکت immutable است یعنی غیرقابل تغییر است و که دارای ویژگی هایی است، اما identity منحصر بفردی ندارد.
  • Domain Event: یک آبجکت است که برای ثبت یک رویداد مجزا مربوط به model activity در سیستم استفاده می شود. در حالی که همه event ها درون سیستم قابل ردیابی هستند، یک domain event فقط برای event type ها ایجاد می شود که متخصصان domain به آن اهمیت می دهند.
  • Aggregate: یک کلاستر از entity ها و value object ها با مرزهای مشخص شده در اطراف گروه می باشد. به جای اینکه به هر entity یا value object اجازه دهید همه اقدامات را به تنهایی انجام دهد، این aggregate مجموعه ای از عناصر یک aggregate root منحصربه فرد را دریافت می کند. در حال حاضر، external object ها دیگر دسترسی مستقیم به هر موجودیت یا value object های درون Aggregate ندارند، بلکه فقط به یک root item واحد، دسترسی دارند و از آن برای ارسال دستورالعمل ها به کل گروه استفاده می کنند. این عمل با بسیاری از شیوه های برنامه نویسی واقعی که ما در سری آموزش الگو های طراحی (Design Pattern ها) در سی شارپ سایت توضیح داده ایم مرتبط است.
  • Service: در اصل یک سرویس، عملیات یا شکلی از یک منطق تجاری است که به طور طبیعی در دنیای object ها قرار نمی گیرد. به عبارت دیگر، برخی از عملکردها باید وجود داشته باشند، اما نمی توانند به یک entity یا value object مربوط باشند.
  • Repositories: این مفهوم با repository های version control اشتباه گرفته نشود، معنای DDD در واقع repository سرویسی است که از interface برای دسترسی به همه entity ها و value object ها در یک aggregate مجموعه خاص استفاده می کند. در واقع روش هایی باید تعریف شود که امکان ایجاد، اصلاح و حذف value object ها در همه جا را فراهم کند. با این حال با استفاده از این repository service برای ایجاد داده های پرس و جو و حذف چندین قابلیت پرس و جو، از داده ها از business logic مربوط به object model ها است.
  • Factories: همانطور که قبلاً در تعدادی از مقاله های الگوهای طراحی بحث کردیم، DDD استفاده از factory را پیشنهاد می کند که منطق ایجاد object ها و ابزارهای پیچیده را در بر می گیرد و اطمینان حاصل می کند که مشتری از عملکرد داخلی object آگاهی ندارد.

سرفصل مطالب آموزش ویدیویی طراحی دامنه محور در سی شارپ Domain Driven Design

فصل اول: مقدمه دوره آموزشی

  • مقدمه دوره آموزشی

فصل دوم: مقدمه ای بر طراحی دامنه محور و یا Domain-Driven Design

  • مقدمه
  • در این دوره آموزشی چه چیزهایی را فرا خواهید گرفت؟
  • بررسی کردن ارزش و اهمیت Domain-Driven Design
  • کسب کردن یک درک سطح بالا از Domain-Driven Design
  • بررسی کردن مزیت ها و معایب بالقوه Domain-Driven Design
  • بررسی کردن یک Mind Map از Domain-Driven Design
  • معرفی کردن اپلیکیشن مربوط به این دوره آموزشی
  • بررسی کردن ساختار اپلیکیشن مورد نظر از سطح بالا
  • جمع بندی

فصل سوم: مدل کردن مسئله و یا Problem ها در نرم افزار

  • مقدمه
  • معرفی کردن Domain
  • برنامه ریزی کردن از قبل برای کشف کردن و یادگیری مسائل Domain
  • صحبت کردن با Domain Expert ها و کشف کردن Domain و Subdomain ها
  • صحبت کردن با Domain Expert ها و کشف کردن و زمانبندی کردن Subdomain ها
  • بازبینی کردن مهمترین موضوعات حاصل شده از جلسات برگزار شده با Domain Expert ها
  • انجام اولین تلاش در مدل کردن Subdomain
  • استفاده کردن از Bounded Context ها برای کشف کردن مفاهیم و Concept هایی که مشترک هستند
  • صحبت کردن با Eric Evans در مورد Subdomain ها و Bounded Context ها
  • معرفی کردن Context Map ها
  • حل کردن مسئله دیتابیس های تفکیک شده به ازای هر Bounded Context
  • مشخص کردن Bounded Context ها در اپلیکیشن
  • بررسی کردن Ubiquitous Language مربوط به Bounded Context
  • صحبت کردن با یک Domain Expert و کار کردن بر روی Ubiquitous Language
  • بازبینی کردن مفاهیم و Concept های مهم مربوط به این فصل
  • جمع بندی

فصل چهارم: عناصر مربوط به Domain Model

  • مقدمه
  • اهمیت درک کردن واژگان مهم در Domain-Driven Design
  • تمرکز کردن بر روی Domain
  • مشخص کردن Event ها و Behavior ها
  • مقایسه کردن Domain Model های Rich و Anemic
  • درک کردن Entity ها
  • تفاوت بین CRUD ها و مسائل پیچیده که از Domain-Driven Design استفاده می کنند
  • جابجا شدن بین Context ها در UI
  • استفاده کردن از GUID ها یا اعداد صحیح برای Identity Value ها
  • صحبت کردن با Eric Evans در رابطه با مسئولیت Entity ها
  • پیاده سازی کردن Entity ها در کد
  • Synchronize کردن داده ها در Bounded Context های مختلف
  • جمع بندی

فصل پنجم: درک کردن Value Object ها و سرویس ها در مدل

  • مقدمه
  • آشنا شدن با Value Object ها
  • معرفی کردن Value Object های پرکاربرد
  • کسب اطلاعات بیشتر از Eric Evans و Vaughn Vernon
  • پیاده سازی کردن Value Object ها در کد
  • درک کردن Domain Service ها
  • جمع بندی

فصل ششم: حل و فصل کردن پیچیدگی با استفاده از Aggregate ها

  • مقدمه
  • حل و فصل کردن پیچیدگی داده ها
  • معرفی کردن Aggregate ها و Aggregate Root ها
  • کار کردن با Association ها در Aggregate ها
  • کار کردن با Relationship هایی که بر روی چندین Aggregate وجود دارند
  • تکامل پیدا کردن یک Aggregate
  • استفاده کردن از Invariant ها برای بهتر فهمیدن Aggregate ها
  • دستاورد های مدل سازی و Refactoring
  • بررسی کردن علائم مربوط به عدم شناخت دقیق یک Aggregate
  • ایجاد کرددن یک Aggregate جدید
  • بررسی کردن Aggregate ایجاد شده
  • بررسی نکات اساسی طراحی Aggregate ها
  • جمع بندی

فصل هفتم: کار کردن با Repository ها

  • مقدمه
  • مقدمه ای بر Repository ها
  • مزایای استفاده از Repository ها
  • نکات مربوط به Repository ها
  • عدم استفاده کردن از Repository Blunder ها
  • صحبت کردن در رابطه با اختلاف نظر مربوط به استفاده کردن از Repository ها
  • مزیت ها و معایب کار کردن با IQueryable
  • کار کردن با Repository های جنریک و اینترفیس ها
  • بررسی کردن Repository ها در اپلیکیشن
  • معرفی کردن Specification Pattern
  • استفاده کردن از Specification ها با Repository ها در اپلیکیشن
  • جمع بندی

فصل هشتم: اضافه کردن Domain Event ها و بررسی Anti-corruption Layer

  • مقدمه
  • معرفی Domain Event ها
  • مشخص کردن Domain Event ها در سیستم
  • طراحی کردن Domain Event ها
  • اعمال کردن Domain Event ها به یک اپلیکیشن ساده
  • بررسی کردن Domain Event ها در اپلیکیشن
  • معرفی کردن Anti-Corruption Layer ها
  • جمع بندی

فصل نهم: تکامل اپلیکیشن با استفاده از Domain-Driven Design

  • مقدمه
  • بازبینی طراحی فعلی اپلیکیشن
  • پیاده سازی یک قابلیت جدید با کمک یک Domain Expert
  • برنامه ریزی کردن مراحل مربوط به پیاده سازی
  • معرفی کردن Message Queue ها
  • ارسال کردن یک Message بر روی Queue
  • خواندن یک Message از روی Queue و پردازش کردن آن
  • استفاده کردن از چندین Queue برای Handle کردن چندین ارتباط
  • رفع خطا و یا Debug کردن به منظور دیدن جزئیات مربوط به کد
  • اهمیت Microservice ها
  • به اشتراک گذاشتن نکات مربوط به گسترش دادن و اجرا کردن برنامه
  • بررسی کردن واسط برنامه و یا UI در Domain Design
  • بررسی در طراحی Domain
  • مدل سازی با Event Storming و تکنیک های دیگر
  • صحبت های Eric Evans در رابطه با دلیل اهمیت ایده آل گرا نبودن
  • جمع بندی و معرفی منابع

نقد و بررسی‌ها

هیچ دیدگاهی برای این محصول نوشته نشده است.

اولین کسی باشید که دیدگاهی می نویسد “آموزش طراحی دامنه محور در سی شارپ Domain Driven Design”

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دسته های محصولات

افزودن به سبد خرید