دوره Event Sourcing & CQRS

  • دسته بندی
    معماری نرم افزار
  • مدت دوره
    48 ساعت
  • جلسات دوره
    12 جلسه 4 ساعته
  • نحوه برگزاری
    آنلاین
  • تاریخ شروع
    24 مهر 1399
  • هزینه دوره
    2.000.000 تومان
  • ثبت نام
  • مشکلات رایج توسعه نرم افزار بدون Event Sourcing
    • عدم تطابق مدل رابطه ای و مدل شی گرا (Object-relational impedance mismatch)
    • عدم پیاده سازی صحیح نیازمندی ها با نگاه CRUD به Use-Case های سیستم
    • از دست رفتن داده های ارزشمند با عملیات های Update & Delete
    • سختی های Query گرفتن از داده های سیستم
  • مروری بر برخی مفاهیم Domain-Driven Design
    • Aggregate – Entity – Value Object
    • Repository
    • Domain-Event
    • Bounded Context
  • آشنایی با مفاهیم Event Sourcing و CQRS
    • معرفی Event Sourcing و تاریخچه ابداع آن
    • بررسی مزایا و چالش های استفاده از آن
    • بررسی کاربردهای آن و پروژه های مناسب برای استفاده از آن
    • مفهوم Event و Event Handler
    • مفهوم Event Stream
    • مفهوم Command و Command Handler
    • بررسی مفهوم Snapshot و کاربرد آن
    • آشنایی با Write-Model و Read-Model
    • آشنایی با مفهوم Projection
    • آشنایی با مفهوم Linearization (خطی سازی)
    • بررسی انواع روش های Subscription
      • Producer-Driven Subscription
      • Consumer-Driven Subscription
    • آشنایی با Materialized View ها و کاربرد آنها
    • آشنایی با مفهوم Idempotency
  • پیاده سازی Event Sourcing و CQRS
    • پیاده سازی Event-Sourced Aggregates
    • پیاده سازی Event-Sourced Repositories
    • پیاده سازی مکانیزم Replay شدن Event ها
    • پیاده سازی Snapshot ها با الگوی Memento
    • مکانیزم ذخیره سازی در Event Sourcing
      • بررسی ابزارها و رویکردهای مختلف برای ذخیره سازی Event ها (Event Store، دیتابیس های رابطه ای و ... )
      • استفاده از Event Store برای ذخیره سازی
      • پیاده سازی مکانیزم Concurrency Control
    • پیاده سازی Projection ها
      • بررسی تفاوت های Catch-up Subscriptions و Live Subscriptions در Event Store
      • ساخت Read Model از روی Event ها
      • کار با Event Link ها
      • ساخت Checkpoint در Projection ها
    • بررسی مفهوم Task-Based UI و اصول آن
    • پیاده سازی مکانیزم ارسال و دریافت Command ها و Event ها
      • به صورت Sync و In-Process
      • به صورت Async
    • بررسی برخی از چالش های Messaging و راهکارهای آن
      • تکرار Message ها
      • از دست رفتن Message ها
      • بهم خوردن ترتیب Message ها
      • Message های پردازش نشده
  • مدیریت Versioning در Event ها
    • بررسی چالش های Versioning در Event ها و Snapshot ها
    • بررسی روش Type Based Versioning
    • نگاهی بر تکنیک Double Writing
    • بررسی تکنیک Up-Casting و Down-Casting
    • بررسی مفهوم Weak Schema و روش های آن
      • Mapping
      • Wrapper
    • بررسی روش Schema Negotiation
    • بررسی مفهوم Compensation
    • بررسی تکنیک Copy-Replace
    • بررسی روش های تصحیح مرز Aggregate ها
    • بررسی تکنیک Copy-Transform
  • مدیریت Eventual Consistency
    • آشنایی با مبحث Eventual Consistency
    • بررسی چالش های Eventual Consistency
      • چالش Consistent نبودن وضعیت Aggregate در Write-Model
      • چالش Sync نبودن Write و Read
      • چالش Consistency بین Bounded-Context ها
    • پیاده سازی الگوی Saga جهت Consistency داده ها
      • بررسی مفهوم و کاربرد Saga
      • پیاده سازی Saga به شکل Orchestration
      • پیاده سازی Saga به شکل Choreography
      • پیاده سازی Compensating Transaction
    • پیاده سازی الگوی Routing-Slip
  • تست سیستم های Event Sourced
    • بررسی استراتژی های تست سیستم های Event Sourced
    • تست اجرای Command ها
    • تست Replay شدن Event ها
    • تست Projection ها
  • تسلط بر مفاهیم Domain-Driven Design

    از آنجا که در این دوره با مفاهیم و مباحث DDD (مانند Aggregate، Domain Event و ...) برخورد خواهیم کرد و در پروژه عملی از آنها استفاده خواهیم کرد، تسلط بر مفاهیم DDD برای شرکت کنندگان در دوره الزامی می باشد. پیشنهاد می شود قبل از حضور در این دوره، در دوره DDD آکادمی شرکت نمایید.

  • تسلط بر الگوهای طراحی شیء گرا

    در جریان پیاده سازی پروژه، با الگوهای طراحی متفاوتی مانند Command ، Memento و ... سر وکار خواهیم داشت. پیشنهاد می شود قبل از شرکت در این دوره، مباحث مربوط به الگوهای طراحی شیء گرا را مطالعه کرده و یا در دوره «اصول و الگوهای طراحی شیء گرا» آکادمی شرکت کنید.