آموزش پیاده سازی الگوی CQRS در سی شارپ

تعداد ویدئو 73
زمان دوره 04:22:45
مترجم مرتضی گیتی
دوبلر مرتضی گیتی
سایت منتشر کننده پلورال سایت

آموزش پیاده سازی اگلوی CQRS در سی شارپ یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته ی آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه ی فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته ی آموزشی CQRS کاربردی است که با نام اصلی CQRS in Practice از شرکت Pluralsight منتشر شده است.

CQRS چیست؟

به بیان ساده CQRS یک سبک معماری ( Architecture Style) است که با استفاده از آن عملیات خواندن (Read Operations) و عملیات نوشتن (Write Operations) از هم تفکیک می شوند.

در معماری های سنتی و ساده اغلب از یک Data Model یکسان برای Query گرفتن و Update کردن دیتابیس استفاده می شود. این موضوع برای نرم افزارهایی که عملیات ساده ی CRUD را انجام می دهند مناسب است. اما در نرم افزارهای پیچیده تر این روش می تواند مشکل ساز شود. برای مثال، ممکن است عملیات خواندن از دیتابیس شامل انجام Query های پیچیده، کار کردن با DTO ها (Data Transfer Object) و همچنین Object Mapping های پیچیده باشد. از طرفی عملیات نوشتن بر روی دیتابیس می تواند شامل Validation های پیجیده و Business Logic های خاص باشد. بنابراین، اگر در چنین نرم افزارهایی از یک Data Model یکسان برای انجام عملیات خواندن و عملیات نوشتن استفاده شود، Data Model به شدت پیجیده می شود.

cqrs-logical

علاوه بر این، اغلب عملیات مربوط به Read و Write دارای Workload های غیرمتقارنی هستند. به عبارت دیگر، نیازمندی های Performance و Scalability در این عملیات کاملاً متفاوت می باشد. سبک معماری CQRS با تفکیک کردن Data Model به دو Data Model جداگانه برای انجام عملیات خواندن و عملیات نوشتن این مشکل را حل می کند. عمیات خواندن از دیتابیس را Query و عملیات نوشتن بر روی دیتابیس را Command نیز می گوییم.

چه زمانی از سبک معماری CQRS استفاده می کنیم؟

بهترین سناریوی استفاده از CQRS در Collaborative Domain ها می باشد که در آنها کاربران زیادی به داده های یکسانی کار می کنند. اغلب در این گونه Domain ها Workload عملیات خواندن و نوشتن نامتقارن است. دقت کنید که CQRS یک معماری سطح بالا (Top-level Architecture) نیست که بتوان آن را به صورت سراسری بر روی یک سیستم اعمال کرد. در واقع CQRS به بخشی از سیستم که در آن تفکیک کردن عملیات خواندن و نوشتن می تواند برای نرم افزار سودمند باشد اعمال می گردد. در غیر اینصورت، پیاده سازی CQRS باعث ایجاد شدن پیچیدگی غیرضروری می شود.

مزایای پیاده سازی CQRS کدامند؟

از مزایای پیاده سازی CQRS می توان به موارد زیر اشاره کرد:

  • Independent Scalability: با استفاده از CQRS می توان Workload های مربوط به عملیات Read و عملیات Write را به صورت مستقل از یکدیگر Scale کرد که این خود می تواند باعث کاهش تعداد lock contention ها شود.
  • Optimized Data Schemas: به دلیل مستقل بودن عملیات Read و عملیات Write نسبت به یکدیگر می توان در عملیات Read از Schema ای استفاده کرد که برای انجام عملیات Read بهینه سازی شده است. همین موضوع را می توان برای عملیات Write نیز انجام داد.
  • امنیت: با استفاده از CQRS می توان به راحتی کنترل کرد که فقط Domain Entity هایی که اجازه ی انجام عملیات Write دارند، این عملیات را انجام دهند.
  • Separation of Concerns: تفکیک کردن Data Model های مربوط به عملیات Write و Read باعث می شود که این Data Model قابلیت Maintainability و Flexibility بالاتری داشته باشند. عمده Business Logic های پیچیده در Write Model قرار گرفته و Read Model ساده تر می شود.
  • Query های ساده تر: با ذخیره کردن یک در دیتابیس Read، می توان از انجام عملیات پر هزینه ی Join در Query ها جلوگیری کرد.

چالش های پیاده سازی CQRS کدامند؟

برخی از چالش های موجود در پیاده سازی CQRS عبارت اند از:

  • پیچیدگی: سبک معماری CQRS ممکن است از نظر ایده ساده باشد اما پیاده سازی آن باعث می شود که طراحی نرم افزار مورد نظر به مراتب پیچیده تر شود. این پیچیدگی با استفاده از الگوی Event Sourcing در کنار CQRS شدت خواهد یافت.
  • Messaging: هر چند که CQRS لزوماً نیازی به استفاده از Messaging ندارد، اما معمولاً برای پردازش Command ها و Publish کردن Update Event ها از Messaging استفاده می شود. در چنین شرایطی نرم افزار باید بتوانید Message Failure ها و Duplicate Message ها را نیز Handle کند.
  • Eventual Consistency: اگر دیتابیس های عملیات Read و عملیات Write را از هم تفکیک کنید، ممکن است داده هایی که از دیتابیس Read خوانده می شوند منقضی و یا اصطلاحاً Stale باشند.

Best Practice های استفاده از CQRS کدامند؟

به منظور بهره مندی هر چه بیشتر از مزایای CQRS به موارد زیر دقت کنید.

  • از الگوی Event Sourcing برای جلوگیری از Update Conflict ها استفاده کنید.
  • به منظور بهینه کردن Schema مربوط به Query ها از الگوی Materialized View در Read Model استفاده کنید.

سرفصل مطالب آموزش ویدئویی کاربردی معماری CQRS در نرم افزار

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

  • مقدمه

فصل دوم: مقدمه

  • مقدمه
  • الگوی CQRS و ریشه ی آن
  • چرا از الگوی CQRS استفاده می کنیم؟
  • الگوی CQRS در دنیای واقعی
  • جمع بندی

فصل سوم: معرفی پروژه ی این آموزش

  • مقدمه
  • معرفی Problem Domain
  • معرفی کد برنامه
  • بررسی معایب کد برنامه
  • جمع بندی

فصل چهارم: ریفکتور کردن به سمت یک Tasked-based Interface

  • مقدمه
  • بررسی یک CRUD-based Interface
  • بررسی یک Task-based Interface
  • جدا کردن متد Update
  • بررسی یک Task-based User Interface
  • کار کردن با متدهای Create و Delete
  • جمع بندی

فصل پنجم: Segregate کردن Command ها و Query ها

  • مقدمه
  • معرفی اولین Command
  • مقایسه ی Command ها در CQS و CQRS
  • بررسی Command ها و Query ها در CQRS
  • بررسی Command ها و Query ها در Onion Architecture
  • مقایسه ی Command ها و DTO ها
  • استفاده از سرویس Dependency Injection در ASP.NET Core برای Resolve کردن Handler ها
  • معرفی اولین Query
  • تمام کردن ریفکتورینگ ها
  • مرور معرفی Command ها و Query ها
  • جمع بندی

فصل ششم: پیاده سازی Decorator ها بر روی Command Handler ها و Query Handler ها

  • مقدمه
  • نیازمندی جدید: Retry های دیتابیس
  • معرفی کردن Database Retry Decorator
  • الگوی Decorator
  • معرفی یک Decorator جدید
  • تنظیم کردن پیکربندی های Decorator
  • مرور تنظیم کردن پیکربندی های Decorator
  • مقایسه ی Decorator و Middleware مربوط به ASP.NET
  • بررسی Best Practice های Command Handler ها و Query Handler ها
  • جمع بندی

فصل هفتم: ساده سازی Read Model

  • مقدمه
  • بررسی State مربوط به Read Model
  • بررسی Separation مربوط به Domain Model
  • ساده سازی Read Model
  • مرور ساده سازی Read Model
  • ارتباط Read Model و Onion Architecture
  • جمع بندی

قصل هشتم: معرفی یک دیتابیس جداگانه برای Query ها

  • مقدمه
  • بررسی Scalability
  • انجام Separation در Data Level در دنیای واقعی
  • طراحی یک دیتابیس برای Query ها
  • ساختن یک دیتابیس برای Query ها
  • مرور ساختن یک دیتابیس برای Query ها
  • بررسی Scalability
  • یک نکته ی کلیدی در مورد دیتابیس های مربوط به Read ها
  • جمع بندی

فصل نهم: Synchronize کردن دیتابیس های Command ها و Query ها

  • مقدمه
  • بررسی State-driven Projection ها
  • بررسی Synchronous State-driven Projection ها
  • بررسی Event-driven Projection ها
  • بررسی Consistency
  • بررسی Eventual Consistency
  • بررسی Versioning
  • بررسی قضیه ی CQRS و CAP
  • جمع بندی

فصل دهم: بررسی Best Practice های CQRS و سوتفاهم ها

  • مقدمه
  • بررسی CQRS و Event Sourcing
  • بررسی Evolutionary Design
  • استفاده از Command ها و Query ها از Handler ها
  • بررسی Command های One-way
  • مقایسه ی CQRS و الگوی Specification
  • لیست منابع
  • جمع بندی دوره ی آموزشی

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

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

اولین کسی باشید که دیدگاهی می نویسد “آموزش پیاده سازی الگوی CQRS در سی شارپ”

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

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

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