دوره عملی ES/CQRS + Tactical DDD

محل برگزاری مدرس تاریخ شروع اولین جلسه روز و ساعت مدت زمان کل دوره تعداد جلسات هزینه ثبت‌نام زود هنگام هزینه ثبت‌نام عادی لینک ثبت نام
آنلاین مسعود بهرامی 18 دی 1399 5شنبه‌ها ساعت 13:30 تا 17:30 36 ساعت 9 جلسه 4 ساعته 1200000 هزار تومان 160000 هزار تومان ثبت ‌نام

معرفی دوره


در این دوره که بصورت کاملا عملی می‌باشد، به معرفی EventSourcing و CQRS، مزایا، موارد استفاده، تاثیر EventSourcing بر معماری‌ سیستم، اهمیت عنصر زمان و همچنین چالش‌هایی که در پیاده‌سازی این معماری‌ها با آنها مواجه خواهید شد می‌پردازیم. همچنین نشان خواهیم داد که چگونه جنبه‌های تکنیکال مورد استفاده در رویکرد DDD از جمله Aggregate ها می‌توانند در پیاده‌سازی موثر این تکنیک‌ها به ما کمک کند. همچنین در این دوره به مهمترین الگوها و پرکتیس‌های تکنیکال DDD خواهیم پرداخت و آنها را پیاده‌سازی خواهیم کرد.

این دوره بصورت کاملا عملی و پروژه محور طراحی شده و شرکت‌کنندگان در پایان دوره قادر خواهند ضمن آشنایی با جنبه‌های مختلف پیاده‌سازی و همچنین چالش‌های این سبک طراحی و معماری، در پروژه‌های خود از آن استفاده کنند.

چالش‌ها و مسئله‌های مختلف و متنوعی برای در این دوره مطرح می‌شود که هر چالش یک یا چند تکنیک را پوشش می‌دهد و دانشجو با حل کردن و پرکتیس کردن آن می‌تواند بر تکنیک‌ها و اصول مورد اشاره تسلط بهتری پیدا کند.

همچنین در طول دوره چندین جلسه رترو جهت بحث و تبادل نظر و تعمق بیشتر بصورت گروهی برگزار خواهد شد.

سرفصل‌های دوره


  • بررسی آناتومی Domain-Driven Design
  • چرا DDD مهم می باشد؟
  • استراتژی‌های DDD جهت مقابله و غلبه بر پیچیدگی موجود در دامین
  • چگونه می‌توان با شکستن دامنه مسئله با بخش‌های کوچکتر بر پیچیدگی موجود در دامنه مسئله غلبه کرد؟
  • چگونه می‌توان طراحی را بر اساس دامنه پیش برد، و چرا این موضوع برای موفقیت پروژه مهم می‌باشد؟
  • تعریف زبان مشترک و نحوه‌ی رسیدن به آن
  • الگوهای پیاده سازی دامین مدل
  • بررسی دقیقتر مفهوم Context
  • Bounding the Contexts
  • Tactical DDD
    • Aggregate
    • Entities for Managing Lifecycle of things
    • ValueObjects
      • مکانیزم‌های مختلف ذخیره ValueObjectها در دیتابیس‌های رابطه‌ای
    • Entity vs ValueObject
    • Domain Services
    • Repository
    • Specification
    • Domain Events
    • Chantting and Communicating Between Aggregates
    • Bounded Context
    • مکانیزم‌های یکپارچگی بین Bounded Contextها
      • Shared Kernel
      • Customer-Supplier
      • Conformist
      • Anticorruption layer
      • Separate Ways
      • Open-Host Service
      • Published Language
    • بررسی مکانیزم‌های گرفتن کوئری در سیستم‌های با دامین پیچیده
      • بدون استفاده از CQRS
      • معماری CQRS بدون EventSourcng
  • آشنایی با CQRS
    • مقایسه CQRS و CQS
    • CQRS به عنوان معماری
    • تکنیک‌ها و سطوح مختلف پیاده سازی CQRS
      • در سطح API
      • در سطح Application Service
      • در سطح دیتابیس
      • Polyglot Database
  • بررسی مزایا و چالش‌های پیاده‌سازی CQRS
  • مقایسه Write Model و Read Model
    • در سطح Application Service
    • در سطح دیتابیس
    • Projection
    • بررسی مفهوم Materialized View
      • موارد کاربرد
      • مزیت‌ها و چالش‌ها
      • بررسی تکنیک‌ها و ابزارهای مختلف پیاده‌سازی
  • EventSourcing
    • نگاهی دقیق‌تر به مفهوم رویدادنگاری
      • رویداد نگاری به عنوان یک ابزار طراحی
    • بررسی معماری EventSourcing
    • برای چه دامین‌هایی سبک معماری EventSourcing می‌تواند مفید باشد
    • اهمیت زمان و ترتیب و توالی رویدادها
      • سفر در زمان، سفر به گذشته
      • خطی سازی مفهوم زمان
      • Aggregate as a State Machine (EventSourced Aggregate)
      • Replying Events by Aggregate
    • Generic EventSourced Repository
      • ‌ ذخیره کردن ایونت‌ها در دیتابیس‌های رابطه‌ای
      • ذخیره سازی ایونت‌ها در دیتابیس های غیر رابطه‌ای
      • بررسی دیتابیس Event Store
    • Eventual Consistency در Write Model و تاثیر آن بر تصمیمات بیزنسی
      • معرفی و بررسی مفهوم Sandboxing به عنوان یک ابزار پشتیبانی مهم جهت پرداختن به Eventual Consistency در Write Model
    • بررسی دقیقتر به همراه پیاده‌سازی مفهوم Command Store
      • مزایا و معایب Command Store
    • بررسی مکانیزم‌ها مختلف ایجاد Read Modelها توسط Projection
      • پروجکت کردن ایونت‌استریم‌ها درون poly-structured data
    • تکنیک‌ها و معیارهای مختلف تعریف Check Point ها جهت گرفتن Snapshot
    • Eventual Consistency در Read Model
    • بررسی تکنیک‌های مختلف نگاشت کامند به ایونت‌ها
    • استراتژی‌های مختلف مواجه با کارایی
    • استراتژی‌های مختلف مواجه با بهینه سازی سیستم‎‌های ایونت سورس
    • توسعه سیستم‌های توزیع شده با الگوی Pub/Sub
    • The dark side of EventSourcing
      • مدیریت کردن داده‌ها
      • مدیریت Versioning ایونت‌ها
        • راه‌های اجتناب از versioning
        • بررسی مفهوم versioning و تاثیر آن بر جنبه‌های مختلف سیستم
        • بررسی دقیق سطح ریز دانگی Eventها
        • اصول و تکنیک‌های پرداختن به نسخه‌های مختلف ایونت‌ها توسط Aggregateها
        • اصول و تکنیک‌های پرداختن به نسخه‌های مختلف ایونت‌ها توسط Projectorها
          • نحوه‌ی بروز رسانی Read-Modelها
        • تاثیر الگوریتم‌ها و روش‌های Serialization بر versioning
  • اتوماتیک کردن فرآیندهای کسب‌و‌کار به کمک الگوی Saga
    • مدیریت تراکنش‌های طولانی مدت توزیع شده که بین چندین سرویس پخش شده اند
    • Orchestrate کردن تراکنش‌ها و فرآیندها توسط یک Coordinator
    • Choreography کردن تراکنش‌ها و فرآیندها بین سرویسها
    • بررسی معایب و مزایا و موارد استفاده از دو روش Orchestration و Choreography
    • فرآیند Compensating
  • استراتژی‌های مختلف نوشتن تست برای سیستم‌های ایونت سورسینگ
    • نوشتن تست برای نگاشت صحیح کامند به ایونت‌ها توسط Aggregate
    • نوشتن تست برای تائید ترتیب صحیح وقوع ایونت‌ها از نظر زمانی
    • نوشتن تست برای Projectorهای ایونت‌ها
    • نوشتن تست برای Up-cast و Down-cast شدن صحیح یک ایونت به نسخه‌های بالاتر یا پایین تر
    • نوشتن تست برای عملکرد صحیح Check-pointها
    • نوشتن تست برای عملیات گرفتن و استفاده کردن از Snapshotها
  • جلسه رترو پایانی
    • بررسی استراتژی‌های مختلف جهت تغییر و مقیاس پذیر کردن سیستم‌های EventSourced
    • بحث و بررسی دقیتر تاثیرات و ریسک‌های social-technical استفاده و پیاده سازی کردن CQRS و Event Sourcing

در خبرنامه عضو شوید